日期:2014-05-18  浏览次数:20545 次

按月份按部门查询统计问题
数据表如下:

合同编号 创建时间 部门 
XXX1 2012-2-28 0:03:50 商用部
XXX2 2012-3-28 0:03:50 民用部
……………………
…………………………
………………………………


现在想使查询结果这样显示:第一列显示月份,第二、三列显示该部门当月合同数(没有合同显示为0)

月份 商用部 民用部
1 3 2
2 4 5
3 0 0
4 5 5
……


这个我觉得很复杂,头痛好久的。请大家帮帮忙!

------解决方案--------------------
select 月份,count(合同)as 合同数,count(部门)as 部门数 from table group by 月份
------解决方案--------------------
月份可以用month(创建时间)得到,也就是把上面的月份用这个换了,group by后面的也用这个换了
------解决方案--------------------
SELECT 年,月,SUM(商用部合同数) 商用部合同数,SUM(民用部合同数) 民用部合同数 FROM (SELECT 
YEAR(创建时间)年,MONTH(创建时间)月,

CASE WHEN 部门 ='商用部' THEN COUNT(*) ELSE 0 END 商用部合同数,
CASE WHEN 部门 ='民用部' THEN COUNT(*) ELSE 0 END 民用部合同数 FROM TABLE1
GROUP BY YEAR(创建时间),MONTH(创建时间),部门
) A

GROUP BY 年,月

GO
------解决方案--------------------
SELECT 年,月,SUM(商用部合同数) 商用部合同数,SUM(民用部合同数) 民用部合同数 FROM (SELECT 
YEAR(创建时间)年,MONTH(创建时间)月,

CASE WHEN 部门 ='商用部' THEN COUNT(*) ELSE 0 END 商用部合同数,
CASE WHEN 部门 ='民用部' THEN COUNT(*) ELSE 0 END 民用部合同数 FROM TABLE1
GROUP BY YEAR(创建时间),MONTH(创建时间),部门
) A

GROUP BY 年,月

GO
------解决方案--------------------
我已经 测试 过了 ,可以达到你的要求。
------解决方案--------------------
探讨
谢谢你的回复!

你的语句对于没有合同的月份就不显示了呀


引用:

月份可以用month(创建时间)得到,也就是把上面的月份用这个换了,group by后面的也用这个换了