sql-server - 在 SQL Server 中将表行展平为列
问题描述
我有下面的 SQL 表,其中有随机生成的数据
Code Data
SL Payroll 22
SL Payroll 33
SL Payroll 43
.. .....
我想传输数据,格式如下图
Code Data1 Data2 Data3 ..
SL Payroll 22 33 43 ....
有人建议使用数据透视表来转换数据,如下所示
SELECT Code,
[22] Data1,
[33] Data2,
[43] Data3
FROM
(
SELECT *
FROM T
) TBL
PIVOT
(
MAX(Data) FOR Data IN([22],[33],[43])
) PVT
但这假设数据点是静态的,如 22,33,但它们是动态生成的。
解决方案
如果您有已知或最大数量的所需列,则可以进行简单的 PIVOT,否则,您需要使用DYNAMIC
例子
Select *
From (
Select [Code]
,[Data]
,[Col] = concat('Data',Row_Number() over (Partition By [Code] Order by 1/0))
From YourTable
) src
Pivot (max([Data]) for [Col] in ([Data1],[Data2],[Data3],[Data4],[Data5])) pvt
退货
Code Data1 Data2 Data3 Data4 Data5
SL Payroll 22 33 43 NULL NULL
推荐阅读
- tmux - TMUX:将相关会话存储在一个组中?
- mysql - MYSQL - 使用 GROUP BY 时获取最新结果
- quartz-scheduler - Quartz:应用程序启动时作业未启动
- mongodb - 查询以将文档的交叉点与字段集中匹配
- c# - 从调用后我停用的脚本调用协程后如何继续协程
- css - iframe,在里面维护原始的css
- javascript - 如何在javascript中上传之前用调整大小的图像替换图像输入字段
- node.js - 将第 3 方模块添加到 Materialisecss?
- python - 将输出添加到测试的“FAILURES”部分,而不捕获标准输出
- android - “找不到任何与 com.google.android.gms:play-services-basement:[15.0.1,16.0.0) 匹配的版本”