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

请SQL语句,在线等待
有两个表:
部门表(部门ID,部门名称)
记录表(记录ID,部门ID,日期,人数,班制)

其中日期为字符型,如“2007-01-01”,现要求可以按部门和日期以及班制对人数进行统计求和。统计输出需要字段:部门名、日期、人数和、类型。

比如输入:2006-03-01   至   2007-10-31日期范围:
1、按年份统计,可分别求06年和07年各部门不同班制的总人数
2、按月份统计,可分别求06年3月到07年10月每月和部门不同班制的总人数
3、按天数统计,可分别求2006-03-01   至   2007-10-31各部门不同班制的总人数。

还有记录表中的日期字段用字符型是不是不适合,是不是一定要用日期类型方便些?



------解决方案--------------------
分别用group by year(dt)
group by convert(varchar(7),dt,120)
group by convert(varchar(10),dt,120)
------解决方案--------------------
2
select substring(日期,1,2) as 年份,substring(日期,3,2) as 月份,部门名称,班制sum(人数)
from 部门表 a,记录表 b
where a.部门ID=b.部门ID
and 日期> = '2006-03-01 '
and 日期 < '2007-11-01 '
group by substring(日期,1,2),substring(日期,3,2),部门名称,班制
order by substring(日期,1,2),substring(日期,3,2)
------解决方案--------------------
两位都正确
------解决方案--------------------
select left(日期,4) as 年份 , 部门名称, 班制,sum(人数) as 人数 from
(
select a.部门名称 , b.* from 部门表 a, 记录表 b where a.部门ID = b.部门ID
) t
group by left(日期,4) , 部门名称, 班制

select substring(日期,6,2) as 月份 , 部门名称, 班制,sum(人数) as 人数 from
(
select a.部门名称 , b.* from 部门表 a, 记录表 b where a.部门ID = b.部门ID
) t
group by substring(日期,6,2) , 部门名称, 班制

select 日期 , 部门名称, 班制,sum(人数) as 人数 from
(
select a.部门名称 , b.* from 部门表 a, 记录表 b where a.部门ID = b.部门ID
) t
group by 日期 , 部门名称, 班制