动态透视 SQL 列数据到 Header

Dynamic Pivot SQL Column Data to Header

我想转置以下 table,以便第一列 (tabLabel) 变为 header。我需要动态地执行此操作,因为行数未知。我看过有关动态枢轴的帖子,但我不完全理解如何做到这一点。

tabLabel            documentId  recipientId     Date    value
Street Address          1           1           NULL    123 mockingbird lane
City                    1           1           NULL    city
Patient Phone           1           1           NULL    999-999-9999
Responsible Phone       1           1           NULL    999-999-9999
Gross Income            1           1           NULL    999
Monthly Mortgage/Rent   1           1           NULL    100
Monthly Auto            1           1           NULL    200

最终版本:

Street Address         City   Patient Phone   Responsible Phone   Gross Income  Monthly Mortage/Rent   Monthly Auto   documentId   recipientId   Date
123 mockingbird lane   city   999-999-9999    999-999-9999        999           100                    200            1             1            NULL

Select 查询原始 Table:

SELECT [tabLabel]
  ,[documentId]
  ,[recipientId]
  ,[Date]
  ,[value]
  FROM [zDocusign_Document_Tab_Fields]

动态sql

-- Build colums
DECLARE @cols NVARCHAR(MAX)
SELECT  @cols = STUFF((
    SELECT  DISTINCT ',' + QUOTENAME([tabLabel])
    FROM    zDocusign_Document_Tab_Fields
    FOR XML PATH('')
), 1, 1, '')
-- Selecting as FOR XML PATH will give you a string value with all of the fields combined
-- separated by comma.  Stuff simply removes the first comma.
-- Quotename wraps the [tabLabel] value in brackets to allow for spaces in column name
-- You end up with
-- [City],[Gross Income],[Monthly Auto],[Monthly Mortgage/Rent],[Patient Phone],[Responsible Phone],[Street Address]

-- Build sql
DECLARE @sql NVARCHAR(MAX)
SET     @sql = N'
    SELECT  ' + @cols +' 
    FROM    zDocusign_Document_Tab_Fields
    PIVOT   (
        MAX([value])
        FOR [tabLabel] IN (' + @cols + ')
    ) p
'

-- Execute Sql
EXEC(@sql)