表内容如下:
施工日期 业务类别 合同号
2009-1-1 A HI001
2010-12-5 B HI002
2008-10-6 C HI003
2011-5-6 A HI001
2012-3-27 F HI004想统计的结果如下:
年度 业务类别 1月合同数 2月合同数 3月合同数 …
2008 A
2008 B
...
2009
2010
…每个合同号可能有多次施工记录,比如,合同号HI001,分别在2009-1-1 和2011-5-6施工过,重复合同号不用统计在线求助,谢谢!
施工日期 业务类别 合同号
2009-1-1 A HI001
2010-12-5 B HI002
2008-10-6 C HI003
2011-5-6 A HI001
2012-3-27 F HI004想统计的结果如下:
年度 业务类别 1月合同数 2月合同数 3月合同数 …
2008 A
2008 B
...
2009
2010
…每个合同号可能有多次施工记录,比如,合同号HI001,分别在2009-1-1 和2011-5-6施工过,重复合同号不用统计在线求助,谢谢!
COUNT(DISTINCT CASE WHEN MONTH(施工日期)=1 THEN 合同号 END) AS [1月合同数],
COUNT(DISTINCT CASE WHEN MONTH(施工日期)=2 THEN 合同号 END) AS [2月合同数]
--。
from tb
group by year(施工日期),业务类别
ORDER BY 1,2
--> 测试数据:[tbl]
if object_id('[tbl]') is not null drop table [tbl]
create table [tbl]([施工日期] datetime,[业务类别] varchar(1),[合同号] varchar(5))
insert [tbl]
select '2009-1-1','A','HI001' union all
select '2010-12-5','B','HI002' union all
select '2008-10-6','C','HI003' union all
select '2011-5-6','A','HI001' union all
select '2012-3-27','F','HI004'declare @str varchar(max)
set @str=''
select @str=@str+','+'['+LTRIM(MONTH([施工日期]))+'月份合同数]'+
'=sum(case when MONTH([施工日期])='+ltrim(MONTH([施工日期]))+
' then 1 else 0 end)' from tbl group by MONTH([施工日期])
print @str
exec('select year([施工日期]) as 年份,[业务类别]'
+@str+' from tbl group by year([施工日期]),[业务类别]')
/*
年份 业务类别 1月份合同数 3月份合同数 5月份合同数 10月份合同数 12月份合同数
2009 A 1 0 0 0 0
2011 A 0 0 1 0 0
2010 B 0 0 0 0 1
2008 C 0 0 0 1 0
2012 F 0 1 0 0 0
*/
COUNT(DISTINCT CASE WHEN MONTH(施工日期)=1 THEN 合同号 END) AS [1月合同数],
COUNT(DISTINCT CASE WHEN MONTH(施工日期)=2 THEN 合同号 END) AS [2月合同数]
--。
from tb
group by year(施工日期),业务类别
CREATE TABLE TEMP(施工日期 DATETIME,业务类别 VARCHAR(200),合同号 VARCHAR(200))
CREATE TABLE TEMP1(施工日期 DATETIME,业务类别 VARCHAR(200),合同号 VARCHAR(200))INSERT INTO TEMP
select '2009-1-1','A','HI001'
UNION ALL
select '2010-12-5','B','HI002'
UNION ALL
select '2008-10-6','C','HI003'
UNION ALL
select '2011-5-6','A','HI001'
UNION ALL
select '2012-3-27','F','HI004'DECLARE @施工日期 DATETIME,@业务类别 VARCHAR(200),@合同号 VARCHAR(200)DECLARE CUR CURSOR FOR
SELECT * FROM TEMP
ORDER BY 施工日期
OPEN CUR
FETCH NEXT FROM CUR INTO @施工日期,@业务类别,@合同号
WHILE @@FETCH_STATUS=0
BEGIN
INSERT INTO TEMP1
SELECT @施工日期,@业务类别,@合同号
WHERE NOT EXISTS(SELECT 1 FROM TEMP1 WHERE 合同号=@合同号)
FETCH NEXT FROM CUR INTO @施工日期,@业务类别,@合同号
ENDCLOSE CUR
DEALLOCATE CURSELECT YEAR(施工日期) AS [年度] ,业务类别 AS [业务类别],
SUM(CASE MONTH(施工日期) WHEN 1 THEN 1 ELSE 0 END) AS [1月合同数],
SUM(CASE MONTH(施工日期) WHEN 2 THEN 1 ELSE 0 END) AS [2月合同数],
SUM(CASE MONTH(施工日期) WHEN 3 THEN 1 ELSE 0 END) AS [3月合同数],
SUM(CASE MONTH(施工日期) WHEN 4 THEN 1 ELSE 0 END) AS [4月合同数],
SUM(CASE MONTH(施工日期) WHEN 5 THEN 1 ELSE 0 END) AS [5月合同数],
SUM(CASE MONTH(施工日期) WHEN 6 THEN 1 ELSE 0 END) AS [6月合同数],
SUM(CASE MONTH(施工日期) WHEN 7 THEN 1 ELSE 0 END) AS [7月合同数],
SUM(CASE MONTH(施工日期) WHEN 8 THEN 1 ELSE 0 END) AS [8月合同数],
SUM(CASE MONTH(施工日期) WHEN 9 THEN 1 ELSE 0 END) AS [9月合同数],
SUM(CASE MONTH(施工日期) WHEN 10 THEN 1 ELSE 0 END) AS [10月合同数],
SUM(CASE MONTH(施工日期) WHEN 11 THEN 1 ELSE 0 END) AS [11月合同数],
SUM(CASE MONTH(施工日期) WHEN 12 THEN 1 ELSE 0 END) AS [12月合同数]
FROM TEMP1
GROUP BY YEAR(施工日期),MONTH(施工日期),业务类别
ORDER BY YEAR(施工日期),业务类别DROP TABLE TEMP
DROP TABLE TEMP1