将行反透视为列
Unpivot rows into columns
我想根据案例编号对 table 进行逆轴旋转:(请参阅图片了解格式化的 table)
但是,它是一个大数据集,所以我不能将每个日期的值都放在 unpivot 函数中。任何帮助将不胜感激!
MS SQL Server 2017 架构设置:
create table Cases (CaseNumber int, OpenD date , Approved date )
insert into Cases(CaseNumber,OpenD,Approved)values(3527,'2/11/18','5/11/18')
insert into Cases(CaseNumber,OpenD,Approved)values(7756,'3/12/18','10/12/18')
insert into Cases(CaseNumber,OpenD,Approved)values(6192,'1/1/19',NULL)
查询 1:
Select CaseNumber,Date,Status
FROM Cases c
unpivot (
Date for Status in (OpenD,Approved)
) as UnPVt
| CaseNumber | Date | Status |
|------------|------------|----------|
| 3527 | 2018-02-11 | OpenD |
| 3527 | 2018-05-11 | Approved |
| 7756 | 2018-03-12 | OpenD |
| 7756 | 2018-10-12 | Approved |
| 6192 | 2019-01-01 | OpenD |
我建议为此使用 cross apply
:
select c.case_number, v.[date], v.status
from cases c cross apply
(values (open, 'open'), (approved, 'approved')
) v([date], status)
order by c.case_number, v.[date];
从技术上讲,apply
实现了 "lateral join"。这是一个非常强大的机制,unpivoting 很好地介绍了它们的作用。
相比之下,unpivot
是仅在少数数据库中可用的定制语法。它只做一件事——而这件事可以用另一种方式轻松完成。
我想根据案例编号对 table 进行逆轴旋转:(请参阅图片了解格式化的 table)
但是,它是一个大数据集,所以我不能将每个日期的值都放在 unpivot 函数中。任何帮助将不胜感激!
MS SQL Server 2017 架构设置:
create table Cases (CaseNumber int, OpenD date , Approved date )
insert into Cases(CaseNumber,OpenD,Approved)values(3527,'2/11/18','5/11/18')
insert into Cases(CaseNumber,OpenD,Approved)values(7756,'3/12/18','10/12/18')
insert into Cases(CaseNumber,OpenD,Approved)values(6192,'1/1/19',NULL)
查询 1:
Select CaseNumber,Date,Status
FROM Cases c
unpivot (
Date for Status in (OpenD,Approved)
) as UnPVt
| CaseNumber | Date | Status |
|------------|------------|----------|
| 3527 | 2018-02-11 | OpenD |
| 3527 | 2018-05-11 | Approved |
| 7756 | 2018-03-12 | OpenD |
| 7756 | 2018-10-12 | Approved |
| 6192 | 2019-01-01 | OpenD |
我建议为此使用 cross apply
:
select c.case_number, v.[date], v.status
from cases c cross apply
(values (open, 'open'), (approved, 'approved')
) v([date], status)
order by c.case_number, v.[date];
从技术上讲,apply
实现了 "lateral join"。这是一个非常强大的机制,unpivoting 很好地介绍了它们的作用。
相比之下,unpivot
是仅在少数数据库中可用的定制语法。它只做一件事——而这件事可以用另一种方式轻松完成。