2016-07-14 20 views
0

最初の列(tabLabel)がヘッダーになるように次の表を転記します。行数が不明なので、私はこれを動的に行う必要があります。私はダイナミックピボットの記事を見たことがありますが、これがどのように行われるのか完全に理解していません。ヘッダーへの動的ピボットSQL列データ

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 tableまたはinsert文を挿入するのですか? –

+0

つまり、このデータを一部のアプリケーションに読み込んでいる場合は、そこのデータをピボットすることができます。私はC#でこれを行うことは、私が "SQL Serverの動的ピボット"を尋ねたときに見たものよりもはるかに簡単であることを知っています – 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

ありがとうございました!すぐに働きました! –

関連する問題