下面是不考虑多个月和仅显示日历样式的处理语句,表结果同上:
select 星期日,星期一,星期二,星期三,星期四,星期五,星期六
from(
select 行
,星期日=max(case 星期 when 1 then 事件 else '' end)
,星期一=max(case 星期 when 2 then 事件 else '' end)
,星期二=max(case 星期 when 3 then 事件 else '' end)
,星期三=max(case 星期 when 4 then 事件 else '' end)
,星期四=max(case 星期 when 5 then 事件 else '' end)
,星期五=max(case 星期 when 6 then 事件 else '' end)
,星期六=max(case 星期 when 7 then 事件 else '' end)
from(
select 星期=datepart(weekday,日期)
,行=datepart(week,日期)-datepart(week,(select min(日期) from @表a))
,事件
from @表a
) a group by 行
) a
insert a select '2003-8-1','abc'
insert a select '2003-8-2',''
insert a select '2003-8-3','xyz'
select
isnull((select 事件 from a where datepart(wk, 日期) = datepart(wk, B.日期) and datepart(dw, 日期) = 1),'') [1],
isnull((select 事件 from a where datepart(wk, 日期) = datepart(wk, B.日期) and datepart(dw, 日期) = 2),'') [2],
isnull((select 事件 from a where datepart(wk, 日期) = datepart(wk, B.日期) and datepart(dw, 日期) = 3),'') [3],
isnull((select 事件 from a where datepart(wk, 日期) = datepart(wk, B.日期) and datepart(dw, 日期) = 4),'') [4],
isnull((select 事件 from a where datepart(wk, 日期) = datepart(wk, B.日期) and datepart(dw, 日期) = 5),'') [5],
isnull((select 事件 from a where datepart(wk, 日期) = datepart(wk, B.日期) and datepart(dw, 日期) = 6),'') [6],
isnull((select 事件 from a where datepart(wk, 日期) = datepart(wk, B.日期) and datepart(dw, 日期) = 7),'') [7]
from A as B
group by datepart(wk, B.日期)
-- 创建数据测试环境
declare @表a table(日期 datetime,事件 varchar(100))
insert into @表a
select '2003-08-01','abc'
union all select '2003-08-02',''
union all select '2003-8-3','xyz'
union all select '2003-8-25','xyz1'
----------------------------------------------------------------
加油,还差一步了!!!
-- 创建数据测试环境
declare @表a table(日期 datetime,事件 varchar(100))
insert into @表a
select '2003-08-01','abc'
union all select '2003-08-02',''
union all select '2003-8-3','xyz'
--得到结果
select 年月,行
,星期日=max(case 星期 when 1 then 事件 else '' end)
,星期一=max(case 星期 when 2 then 事件 else '' end)
,星期二=max(case 星期 when 3 then 事件 else '' end)
,星期三=max(case 星期 when 4 then 事件 else '' end)
,星期四=max(case 星期 when 5 then 事件 else '' end)
,星期五=max(case 星期 when 6 then 事件 else '' end)
,星期六=max(case 星期 when 7 then 事件 else '' end)
from(
select 年月,星期,事件
,行=datepart(week,日期)-datepart(week,(select min(日期) from @表a where convert(varchar(6),日期,112)=a.年月))
from(
select 年月=convert(varchar(6),日期,112)
,星期=datepart(weekday,日期)
,日期,事件
from @表a
) a
) a group by 年月,行
Select (case when datepart(weekday,日期) = 1 then 事件 else '' end) as 星期1,
(case when datepart(weekday,日期) = 2 then 事件 else '' end) as 星期2,
(case when datepart(weekday,日期) = 3 then 事件 else '' end) as 星期3,
(case when datepart(weekday,日期) = 4 then 事件 else '' end) as 星期4,
(case when datepart(weekday,日期) = 5 then 事件 else '' end) as 星期5,
(case when datepart(weekday,日期) = 6 then 事件 else '' end) as 星期6,
(case when datepart(weekday,日期) = 7 then 事件 else '' end) as 星期7
from 表a
Select (case when datepart(weekday,日期) = 2 then 事件 else '' end) as 星期1,
(case when datepart(weekday,日期) = 3 then 事件 else '' end) as 星期2,
(case when datepart(weekday,日期) = 4 then 事件 else '' end) as 星期3,
(case when datepart(weekday,日期) = 5 then 事件 else '' end) as 星期4,
(case when datepart(weekday,日期) = 6 then 事件 else '' end) as 星期5,
(case when datepart(weekday,日期) = 7 then 事件 else '' end) as 星期6,
(case when datepart(weekday,日期) = 1 then 事件 else '' end) as 星期7
from 表a