2016-07-14 6 views
0

Я хотел бы перенести следующую таблицу, чтобы первый столбец (tabLabel) стал заголовком. Мне нужно сделать это динамически, потому что количество строк неизвестно. Я видел сообщения о динамических центрах, но я не совсем понимаю, как это будет сделано.Dynamic Pivot SQL Column Data to 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 [tabLabel] 
    ,[documentId] 
    ,[recipientId] 
    ,[Date] 
    ,[value] 
    FROM [zDocusign_Document_Tab_Fields] 
+0

Вы можете сделать это в вашем коде? Было бы намного легче читать. – user2023861

+0

@ user2023861 Вы хотите вставить мою таблицу create или инструкцию insert? –

+0

Я имею в виду, если вы читаете эти данные в каком-либо приложении, вы можете поворачивать туда данные. Я знаю, что делать это в C# было бы намного проще, чем то, что я видел, когда я искал «динамический pivot сервера sql» – user2023861

ответ

2

динамический 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) 
+0

Большое вам спасибо! Мгновенно работает! –