首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求sql话语,统计

2013-09-04 
求sql语句,统计人员表,除了id,name,sex,班组, 还有个登记时间的字段类型是datetime现在要求传入两个月份作

求sql语句,统计
人员表,除了id,name,sex,班组, 还有个登记时间的字段类型是datetime
现在要求传入两个月份作为参数,查询出来所有班组分别对应两个月份的登记人数,并且显示第二个月份和第一个月份的差值,按照差值排序
[解决办法]
select *
from (
select 班组, sum(case when convert(varchar(7),登记时间,120)='月份参数1' then 1 else 0 end) as [月份1人数],sum(case when convert(varchar(7),登记时间,120)='月份参数2' then 1 else 0 end) as [月份2人数]
from tb
where convert(varchar(7),登记时间,120)='月份参数1' or convert(varchar(7),登记时间,120)='月份参数2'
group by 班组)t
order by 月份1人数-月份2人数
[解决办法]

--id,name,sex,班组, 登记时间
DECLARE @month1 CHAR(7), @month2 CHAR(7)
SELECT @month1 = '2013-03', @month2 = '2013-04'

SELECT 
班组 = COALESCE(a.班组, b.班组),
[数量1] = ISNULL(a.cnt, 0),
[数量2] = ISNULL(b.cnt, 0),
差值 = ISNULL(a.cnt, 0) - ISNULL(b.cnt, 0)
FROM
(
SELECT 班组, cnt=COUNT(1)
FROM TB
WHERE CONVERT(CHAR(7),登记时间,120) = @month1
GROUP BY 班组
) a
FULL JOIN
(
SELECT 班组, cnt=COUNT(1)
FROM TB
WHERE CONVERT(CHAR(7),登记时间,120) = @month2
GROUP BY 班组
) b
ON a.班组 = b.班组

热点排行