请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 日期 , 部门名称, 班制