【发布时间】:2021-10-29 07:29:39
【问题描述】:
我正在尝试透视表数据
Create table strategy(date date,[event] varchar(100),eType varchar(100))
insert into dbo.strategy (DATE, [event], eType) values
('1 Jan 2018' , 'ABZPD', 'dev'),
('1 Jan 2018', 'BFSPD', 'stage'),
('1 Jan 2018', 'BFSPD', 'pre-dep');
select * from strategy
预期输出:
| DATE | ABZPD | BFSPD | BFSZH | BHXPD | BHXZH | BRSZH | BRUPQ |
|---|---|---|---|---|---|---|---|
| 2018-01-01 | dev | stage | NULL | NULL | NULL | NULL | NULL |
| 2018-01-01 | NULL | pre-dep | NULL | NULL | NULL | NULL | NULL |
我尝试了以下代码
SELECT *
FROM
(
SELECT DATE
,[event]
,eType
FROM [strategy]
where datename(year, DATE) = 2018 or datename(year,DATE)=2019
) AS SourceTable
PIVOT
(
MAX(eType)
FOR event IN ([ABZPD],[BFSPD]
,[BFSZH]
,[BHXPD]
,[BHXZH]
,[BRSZH]
,[BRUPQ] )
) AS PivotTable;
drop table strategy
下面是我得到的输出:
| DATE | ABZPD | BFSPD | BFSZH | BHXPD | BHXZH | BRSZH | BRUPQ |
|---|---|---|---|---|---|---|---|
| 2018-01-01 | dev | stage | NULL | NULL | NULL | NULL | NULL |
【问题讨论】:
-
为什么
dev属于第一条记录而不属于第二条记录?这就是为什么你没有得到你所期望的,因为 pivot 使用隐式聚合工作,你不能在同一日期有 2 个最大值
标签: sql sql-server tsql sql-server-2012 pivot