【发布时间】:2023-03-04 23:20:01
【问题描述】:
我正在尝试以数据透视格式获取简单的联接查询结果。
分享示例查询:
if object_id('tempdb.dbo.#t') is not null
drop table #t
create table #t (
EmpName nvarchar(1000),
CaseNumber nvarchar(1000),
[WeekDay] nvarchar(1000)
)
insert into #t values ('Sam','SM100','Monday')
insert into #t values ('Sam','SM100','Wednesday')
insert into #t values ('Sam','SM100','Thursday')
insert into #t values ('Peter','PT200','Monday')
insert into #t values ('Peter','PT200','Tuesday')
insert into #t values ('Peter','PT200','Wednesday')
insert into #t values ('Peter','PT200','Thursday')
insert into #t values ('Peter','PT200','Friday')
insert into #t values ('Peter','PT200','Saturday')
insert into #t values ('Peter','PT200','Sunday')
select * from #t
-- Expected output tabular format
来自John's的查询...
;with cte as
(
Select *
From (Select *,Val=1 From #t) src
Pivot (sum(Val) for weekday in ([Sunday],[Monday],[Tuesday],[Wednesday],[Thursday],[Friday],[Saturday]) )pvt
)
select EmpName, CaseNumber,
Case When Sunday = 1 then 'Yes' when isnull(Sunday,'') = '' then 'No' end Sunday,
Case When Monday = 1 then 'Yes' when isnull(Monday,'') = '' then 'No' end Monday,
Case When Tuesday = 1 then 'Yes' when isnull(Tuesday,'') = '' then 'No' end Tuesday,
Case When Wednesday = 1 then 'Yes' when isnull(Wednesday,'') = '' then 'No' end Wednesday,
Case When Thursday = 1 then 'Yes' when isnull(Thursday,'') = '' then 'No' end Thursday,
Case When Friday = 1 then 'Yes' when isnull(Friday,'') = '' then 'No' end Friday,
Case When Saturday = 1 then 'Yes' when isnull(Saturday,'') = '' then 'No' end Saturday
from cte
我不喜欢使用太多的 case 语句...
【问题讨论】:
-
也许你需要使用
PIVOT。
标签: sql sql-server database tsql pivot