将行反透视为列

Unpivot rows into columns

我想根据案例编号对 table 进行逆轴旋转:(请参阅图片了解格式化的 table)

但是,它是一个大数据集,所以我不能将每个日期的值都放在 unpivot 函数中。任何帮助将不胜感激!

SQL Fiddle

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

Results:

| 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 是仅在少数数据库中可用的定制语法。它只做一件事——而这件事可以用另一种方式轻松完成。