完成按照日期排列
来源:互联网 发布:怎么用数据库做购物车 编辑:程序博客网 时间:2024/06/05 07:27
-- exec sp_text 'dbo.proc_LabelChartByDate'
if exists (select * from sysobjects where id=object_id('dbo.proc_LabelChartByDate'))
drop procedure dbo.proc_LabelChartByDate
go
set ansi_nulls off
go
CREATE procedure [dbo].[proc_LabelChartByDate]
/***
Name : 根据天或者月统计条码数量
Param: @Type类型(1月,2天);@InsertSql(SQL语句);@start(开始统计时间);@end(结束统计时间)
Remark:
Example:注意1master..spt_values这个函数记录所有的次序数据;2@Type类型(1月,2天) 由于类型不同故number的计算方法不一样
exec proc_LabelChartByDate 2,'','2014-10-01','2014-12-31'
author : WQF 2014.4.18
***/
@Type int,
@InsertSql nvarchar(3000),
@start datetime,
@end datetime
as
set xact_abort on
begin
--构造临时表#LabelData
create table #LabelData
(
ID int identity(1,1),
Label_ID uniqueidentifier,
PrintDate datetime
)
--构造临时表#ResultData
create table #ResultData(
DateStr nvarchar(20),
LabelNum int
)
--exec(@InsertSql)
insert into #LabelData(Label_ID,PrintDate)
select Print_UID,Print_Date from Label_Print
where Print_Date between @start and @end
--Type=1表示按照月份进行统计
if(@Type=1)
begin
;WITH TT AS (SELECT number FROM master..spt_values WHERE type = 'P' AND number BETWEEN 0 AND (DATEPART(MONTH,@end)-DATEPART(MONTH,@start)))
insert into #ResultData(DateStr,LabelNum)
select DataStr=CONVERT(NVARCHAR(12), b.BMonth,23)+'月',LabelNum=isnull(a.AC,0)
from
(select year(Print_Date) as AY,month(Print_Date) AS AM,COUNT(*) AS AC from Label_Print
group by year(Print_Date),month(Print_Date)) AS a right join
(select BMonth=DATEADD(MONTH,TT.number,@start) from TT) AS b ON A.AM=MONTH(BMonth) AND A.AY=YEAR(BMonth)
--查看临时表#ResultData
select * from #ResultData
end
--Type=2表示按照天数进行统计
else if(@Type=2)
begin
DECLARE @sint int
DECLARE @eint int
set @sint=DATEPART(day,@start)
set @eint=DATEPART(day,@start)+DATEdiff(DAY,@start,@end)
;WITH TT AS (SELECT number FROM master..spt_values WHERE type = 'P' AND number BETWEEN @sint-1 AND @eint-1)
insert into #ResultData(DateStr,LabelNum)
select DataStr=CONVERT(NVARCHAR(12), b.BDate,23)+'日',LabelNum=isnull(a.AC,0)
from
(select year(Print_Date) as AY,month(Print_Date) AS AM,day(Print_Date) AS AD,COUNT(*) AS AC from Label_Print
group by year(Print_Date),month(Print_Date),day(Print_Date)) AS a
right join
(select BDate=DATEADD(DAY,TT.number,@start) from TT) AS b ON A.AD=DAY(BDate) AND A.AM=MONTH(BDate) AND A.AY=YEAR(BDate)
--查看临时表#ResultData
select * from #ResultData
end
--释放临时表
drop table #ResultData
drop table #LabelData
end
go
set ansi_nulls off
go
if exists (select * from sysobjects where id=object_id('dbo.proc_LabelChartByDate'))
drop procedure dbo.proc_LabelChartByDate
go
set ansi_nulls off
go
CREATE procedure [dbo].[proc_LabelChartByDate]
/***
Name : 根据天或者月统计条码数量
Param: @Type类型(1月,2天);@InsertSql(SQL语句);@start(开始统计时间);@end(结束统计时间)
Remark:
Example:注意1master..spt_values这个函数记录所有的次序数据;2@Type类型(1月,2天) 由于类型不同故number的计算方法不一样
exec proc_LabelChartByDate 2,'','2014-10-01','2014-12-31'
author : WQF 2014.4.18
***/
@Type int,
@InsertSql nvarchar(3000),
@start datetime,
@end datetime
as
set xact_abort on
begin
--构造临时表#LabelData
create table #LabelData
(
ID int identity(1,1),
Label_ID uniqueidentifier,
PrintDate datetime
)
--构造临时表#ResultData
create table #ResultData(
DateStr nvarchar(20),
LabelNum int
)
--exec(@InsertSql)
insert into #LabelData(Label_ID,PrintDate)
select Print_UID,Print_Date from Label_Print
where Print_Date between @start and @end
--Type=1表示按照月份进行统计
if(@Type=1)
begin
;WITH TT AS (SELECT number FROM master..spt_values WHERE type = 'P' AND number BETWEEN 0 AND (DATEPART(MONTH,@end)-DATEPART(MONTH,@start)))
insert into #ResultData(DateStr,LabelNum)
select DataStr=CONVERT(NVARCHAR(12), b.BMonth,23)+'月',LabelNum=isnull(a.AC,0)
from
(select year(Print_Date) as AY,month(Print_Date) AS AM,COUNT(*) AS AC from Label_Print
group by year(Print_Date),month(Print_Date)) AS a right join
(select BMonth=DATEADD(MONTH,TT.number,@start) from TT) AS b ON A.AM=MONTH(BMonth) AND A.AY=YEAR(BMonth)
--查看临时表#ResultData
select * from #ResultData
end
--Type=2表示按照天数进行统计
else if(@Type=2)
begin
DECLARE @sint int
DECLARE @eint int
set @sint=DATEPART(day,@start)
set @eint=DATEPART(day,@start)+DATEdiff(DAY,@start,@end)
;WITH TT AS (SELECT number FROM master..spt_values WHERE type = 'P' AND number BETWEEN @sint-1 AND @eint-1)
insert into #ResultData(DateStr,LabelNum)
select DataStr=CONVERT(NVARCHAR(12), b.BDate,23)+'日',LabelNum=isnull(a.AC,0)
from
(select year(Print_Date) as AY,month(Print_Date) AS AM,day(Print_Date) AS AD,COUNT(*) AS AC from Label_Print
group by year(Print_Date),month(Print_Date),day(Print_Date)) AS a
right join
(select BDate=DATEADD(DAY,TT.number,@start) from TT) AS b ON A.AD=DAY(BDate) AND A.AM=MONTH(BDate) AND A.AY=YEAR(BDate)
--查看临时表#ResultData
select * from #ResultData
end
--释放临时表
drop table #ResultData
drop table #LabelData
end
go
set ansi_nulls off
go
0 0
- 完成按照日期排列
- 按照IP地址排列
- map 按照值排列
- 数字按照大小排列
- list按照时间排列
- sql语句面试题(查询按照申请日期倒序排列的前10个记录)
- sql语句面试题(查询按照申请日期倒序排列的前10个记录)
- 按工资降序排列,若工资相同,则按照雇佣日期尚需排列,获取6~10 条记录
- SQLite 按照日期分组
- 按照字典序枚举排列
- Map按照值降序排列
- oracle 按照日期区间求和
- oracle 按照日期区间求和
- ubuntu 按照日期自动备份
- php日期按照年月日相加
- linux按照日期生成文件
- 按照日期统计每天用户数量
- 把日期按照天输出
- nyoj 36 最长公共子序列
- jsp实现登陆验证码
- ns 2.35中移值gpsr协议(KeLiu版)
- CF 282C Treasure
- outlook 签名 设置
- 完成按照日期排列
- matlab 精通指南(例程)
- System.getProperty
- Java之美[从菜鸟到高手演练]之Hadoop原理及架构
- RedisClient
- UILabel如何使用sizeToFit正确适配行数
- flow control通常的方法
- 用adb向手机发送按键事件
- linux strace命令详解 进程跟踪