动态透视 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)
我想转置以下 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)