如何进行高级 PIVOT

LCJ*_*LCJ 1 sql sql-server sql-server-2012 sql-server-2016

我在 SQL Server 2016 中有下表

CREATE TABLE #Source (PatientID INT, DiagnosisCode VARCHAR(20), DX_Pt_RowNum INT)
INSERT INTO #Source
SELECT 1 AS PatientID, 'A' AS DiagnosisCode, 1 AS DX_Pt_RowNum UNION
SELECT 1 AS PatientID, 'B' AS DiagnosisCode, 2 AS DX_Pt_RowNum UNION
SELECT 1 AS PatientID, 'C' AS DiagnosisCode, 3 AS DX_Pt_RowNum UNION
SELECT 2 AS PatientID, 'K' AS DiagnosisCode, 1 AS DX_Pt_RowNum UNION
SELECT 2 AS PatientID, 'T' AS DiagnosisCode, 2 AS DX_Pt_RowNum UNION
SELECT 2 AS PatientID, 'E' AS DiagnosisCode, 1 AS DX_Pt_RowNum 
Run Code Online (Sandbox Code Playgroud)

当我们需要聚合数据时,我知道如何在 SQL 中进行基本的 PIVOT 操作。但我有一个复杂的场景如下。我们需要将上述数据转换为以下 PIVOT 格式。如何在 SQL Server 中实现这一点?

注意:我在这个例子中放置了 3 列。实际上,我们有 10 列。因此JOIN,在同一张桌子上多次使用可能并不理想。

在此处输入图片说明

Joh*_*tti 5

通过更新,一个简单的 PIVOT 应该可以解决问题(不需要 JOINS)

Select *
 From  (
        Select PatientID
              ,DiagnosisCode
              ,Col = concat('DX',DX_Pt_RowNum )
          From #Source
       ) src
 Pivot (max(DiagnosisCode) for Col in ([DX1],[DX2],[DX3],[DX4],[DX5],[DX6],[DX7],[DX8],[DX9],[DX10] ) ) pvt
Run Code Online (Sandbox Code Playgroud)

结果

在此处输入图片说明