【问题标题】:SQL Pivot after Cross Apply交叉应用后的 SQL Pivot
【发布时间】:2016-11-30 04:03:27
【问题描述】:

我正在尝试在 SQL Server 中进行透视,其中我需要对下表进行透视:

key       value
column1    billy
column2    billy@billy.com
column5    NULL
column6    false
column9    true

我希望“键”列中的值成为列标题。这里的另一个问题是我使用 CROSS APPLY 从另一个表生成这个表。我开始:

select * from jtable cross apply openjson(json)

这会产生如上所示的表格格式。

如果我不使用交叉应用,我会得到一个如下所示的表格:

ID json
1  "column1":billy, "column2":billy@billy.com
2  "column1":steve, "column2":steve@etc.com

所以我试图最终得到一个如下所示的表格:

column1    column2            column3
billy      billy@billy.com    false
steve      steve@etc.com      false

【问题讨论】:

    标签: sql sql-server tsql pivot cross-apply


    【解决方案1】:

    类似这样的:

    SELECT *
    FROM
    (
        select ROW_NUMBER() OVER (ORDER BY(SELECT 1)) AS ID
              ,* 
        from jtable 
        cross apply openjson(json)
    ) DS
    PIVOT
    (
        MAX([value]) FOR [key] IN ([column1], [column2], [column3], ... , [columnN] )
    ) PVT
    

    如果您不知道列数,请搜索dynamic PIVOT。如果您需要按其他条件排序(以其他特殊方式生成ID) - 您可以更改ROW_NUMBER 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-09
      • 2021-07-05
      • 2011-03-06
      • 1970-01-01
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多