原表如下:
姓名 班次 日期
小王 白班 2010-05-26
小王 白班 2010-05-27
小王 白班 2010-05-28
小王 白班 2010-05-29
小王 白班 2010-05-30
小王 白班 2010-05-31
小王 白班 2010-06-01
小王 白班 2010-06-02
小王 白班 2010-06-03
需要实现内容:
姓名 起始日期 星期一 星期二 星期三 星期四 星期五 星期六 星期日
小王 2010-05-24 白班 白班 白班 白班 白班
小王 2010-05-31 白班 白班 白班 白班 白班 。。。
--> 测试数据: [tb]
if object_id('[tb]') is not null drop table [tb]
create table [tb] (姓名 varchar(4),班次 varchar(4),日期 datetime)
insert into [tb]
select '小王','白班','2010-05-26' union all
select '小王','白班','2010-05-27' union all
select '小王','白班','2010-05-28' union all
select '小王','白班','2010-05-29' union all
select '小王','白班','2010-05-30' union all
select '小王','白班','2010-05-31' union all
select '小王','白班','2010-06-01' union all
select '小王','白班','2010-06-02' union all
select '小王','白班','2010-06-03'
go
set datefirst 1
select 姓名,起始日期, 星期一=max(case datename(dw,日期) when '星期一' then 班次 else null end),
星期二=max(case datename(dw,日期) when '星期二' then 班次 else null end),
星期三=max(case datename(dw,日期) when '星期三' then 班次 else null end),
星期四=max(case datename(dw,日期) when '星期四' then 班次 else null end),
星期五=max(case datename(dw,日期) when '星期五' then 班次 else null end),
星期六=max(case datename(dw,日期) when '星期六' then 班次 else null end),
星期七=max(case datename(dw,日期) when '星期七' then 班次 else null end)
from (select *,起始日期=dateadd(dd,1-datepart(dw,日期),日期) from tb)a
group by 姓名,起始日期
--结果:
姓名 起始日期 星期一 星期二 星期三 星期四 星期五 星期六 星期七
---- ----------------------- ---- ---- ---- ---- ---- ---- ----
小王 2010-05-24 00:00:00.000 NULL NULL 白班 白班 白班 白班 NULL
小王 2010-05-31 00:00:00.000 白班 白班 白班 白班 NULL NULL NULL