UnPivot 多列 MSSQLServer

Posted

技术标签:

【中文标题】UnPivot 多列 MSSQLServer【英文标题】:UnPivot multiple columns MSSQLServer 【发布时间】:2021-12-30 00:56:22 【问题描述】:

我有一个 MSSQLServer 表如下:

CASNumber ClaimVersion ActualHSS ApprovedHSS ActualSurg ApprovedSurg ActualAmb ApprovedAmb
GN00000068 1 819.64 819.64 190 120 1232 1142

从上表中,我正在寻找如下输出:

CASNumber ClaimVersion Item Actual Approved
GN00000068 1 ActualHSS 819.64 819.64
GN00000068 1 ActualSurg 190 120
GN00000068 1 ActualAmb 1232 1142

非常感谢任何专业知识指导。

感谢和问候

【问题讨论】:

【参考方案1】:

您可以使用VALUES 表值构造函数和一个额外的APPLY 运算符来反透视表:

表:

SELECT *
INTO Data
FROM (VALUES 
   ('GN00000068', 1, 819.64, 819.64, 190, 120, 1232, 1142)
) v (CASNumber, ClaimVersion, ActualHSS, ApprovedHSS, ActualSurg, ApprovedSurg, ActualAmb, ApprovedAmb)

声明:

SELECT d.CASNumber, d.ClaimVersion, v.Item, v.Actual, v.Approved
FROM Data d
CROSS APPLY (VALUES
   ('HSS', d.ActualHSS, d.ApprovedHSS),
   ('Surg', d.ActualSurg, d.ApprovedSurg),
   ('Amb', d.ActualAmb, d.ApprovedAmb)
) v (Item, Actual, Approved)

结果:

CASNumber  ClaimVersion Item  Actual  Approved
----------------------------------------------
GN00000068 1            HSS   819.64    819.64
GN00000068 1            Surg  190.00    120.00
GN00000068 1            Amb  1232.00   1142.00

【讨论】:

以上是关于UnPivot 多列 MSSQLServer的主要内容,如果未能解决你的问题,请参考以下文章

PIVOT/UNPIVOT 多行多列

多列,多表列到行 unpivot

SQL unpivot 多列

如何对具有常量/缺失列的多列使用 unpivot?

SQL Unpivot 多列数据

oracle 多列 列转行