mssql值班日期统计

使用sql语句对值班日期统计练习

代码
   
     
-- author:【DBA】小七
--
createtime:2009-11-27

set nocount on
declare @t table (name char ( 10 ) ,Date datetime ,isduty char ( 1 ))
INSERT INTO @t
select ' 李四 ' , convert ( datetime , ' 2009-10-5 ' , 120 ), ' 1 ' UNION ALL
SELECT ' 张三 ' , convert ( datetime , ' 2009-10-12 ' , 120 ), ' 1 ' union all
SELECT ' 张三 ' , convert ( datetime , ' 2009-10-13 ' , 120 ), ' 1 ' union all
select ' 李四 ' , convert ( datetime , ' 2009-10-14 ' , 120 ), ' 1 ' UNION ALL
select ' 张三 ' , convert ( datetime , ' 2009-10-15 ' , 120 ), ' 1 ' UNION ALL
select ' 李四 ' , convert ( datetime , ' 2009-10-16 ' , 120 ), ' 1 ' UNION ALL
select ' 李四 ' , convert ( datetime , ' 2009-10-17 ' , 120 ), ' 1 ' UNION ALL
select ' 张三 ' , convert ( datetime , ' 2009-10-18 ' , 120 ), ' 1 ' UNION ALL
select ' 王五 ' , convert ( datetime , ' 2009-10-19 ' , 120 ), ' 1 ' UNION ALL
select ' 李四 ' , convert ( datetime , ' 2009-10-19 ' , 120 ), ' 1 ' UNION ALL
select ' 张三 ' , convert ( datetime , ' 2009-10-19 ' , 120 ), ' 1 ' UNION ALL
SELECT ' 张三 ' , convert ( datetime , ' 2009-10-20 ' , 120 ), ' 1 ' union all
select ' 李四 ' , convert ( datetime , ' 2009-10-25 ' , 120 ), ' 1 ' UNION ALL
select ' 李四 ' , convert ( datetime , ' 2009-10-28 ' , 120 ), ' 1 ' UNION ALL
select ' 李四 ' , convert ( datetime , ' 2009-11-2 ' , 120 ), ' 1 '

SELECT * FROM @t
select name, sum (星期一) ' 星期一 ' , sum (星期二) ' 星期二 ' , sum (星期三) ' 星期三 ' , sum (星期四) ' 星期四 ' , sum (星期五) ' 星期五 ' , sum (星期六) ' 星期六 ' , sum (星期日) ' 星期日 ' from
(
select name,
isnull (( case when datename (weekday,date) = ' 星期一 ' then count (isduty) end ), 0 ) ' 星期一 ' ,
isnull (( case when datename (weekday,date) = ' 星期二 ' then count (isduty) end ), 0 ) ' 星期二 ' ,
isnull (( case when datename (weekday,date) = ' 星期三 ' then count (isduty) end ), 0 ) ' 星期三 ' ,
isnull (( case when datename (weekday,date) = ' 星期四 ' then count (isduty) end ), 0 ) ' 星期四 ' ,
isnull (( case when datename (weekday,date) = ' 星期五 ' then count (isduty) end ), 0 ) ' 星期五 ' ,
isnull (( case when datename (weekday,date) = ' 星期六 ' then count (isduty) end ), 0 ) ' 星期六 ' ,
isnull (( case when datename (weekday,date) = ' 星期日 ' then count (isduty) end ), 0 ) ' 星期日 '
from @t where date between ' 2009-10-12 ' and ' 2009-10-28 ' group by name, datename (weekday,date) ) as b
group by name


name Date isduty
-- -------- ------------------------------------------------------ ------
李四 2009 - 10 - 05 00 : 00 : 00.000 1
张三
2009 - 10 - 12 00 : 00 : 00.000 1
张三
2009 - 10 - 13 00 : 00 : 00.000 1
李四
2009 - 10 - 14 00 : 00 : 00.000 1
张三
2009 - 10 - 15 00 : 00 : 00.000 1
李四
2009 - 10 - 16 00 : 00 : 00.000 1
李四
2009 - 10 - 17 00 : 00 : 00.000 1
张三
2009 - 10 - 18 00 : 00 : 00.000 1
王五
2009 - 10 - 19 00 : 00 : 00.000 1
李四
2009 - 10 - 19 00 : 00 : 00.000 1
张三
2009 - 10 - 19 00 : 00 : 00.000 1
张三
2009 - 10 - 20 00 : 00 : 00.000 1
李四
2009 - 10 - 25 00 : 00 : 00.000 1
李四
2009 - 10 - 28 00 : 00 : 00.000 1
李四
2009 - 11 - 02 00 : 00 : 00.000 1

name 星期一 星期二 星期三 星期四 星期五 星期六 星期日
-- -------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
李四 1 0 2 0 1 1 1
王五
1 0 0 0 0 0 0
张三
2 2 0 1 0 0 1



 

你可能感兴趣的:(MSSQL)