2016-01-26 48 views
0

我有三列,每列都是NVARCHAR。我的第一個'Id'列出現了無數次針對第二列的每個實例(第三列)。SQL透視大量記錄,字符串數據

我試圖使用pivot操作符,但我在使用字符串數據時遇到了麻煩。

表例如:

RecordId QuestionText    Data 
1   Completion Date   26/01/2016 
1   Gender     M 
1   PreCourse Info   2 
1   Application Process  1 

樞軸要求,例如:

RecordId Completion Date Gender Precourse Info Application Process 
1   26/01/2016  M  2    1 

道歉上述褲子表格佈局

每個RecordId都有大量的數據(1595個不同的RecordIds)和大約50行。

閱讀一些帖子後,我曾嘗試以下:

SELECT * 
FROM 
(
    SELECT 
     RecordId 
     ,QuestionText 
     ,Data 

    FROM #PrePivot 
) AS P 
PIVOT 
(
Data FOR QuestionText 
) AS Pvt 

請將你可以,如果有東西在我的代碼丟失或建議是否會最好不要使用旋轉操作是不勝感激。

感謝您的時間

威爾

回答

0

試試這個:

;WITH PivotData AS 
(
    SELECT 
    RecordId, 
    QuestionText, 
    Data 
    FROM #PrePivot 
) 
SELECT RecordId, [Completion Date], [Gender],[PreCourse Info], [Application Process] 
FROM PivotData 
PIVOT(MAX(Data)FOR QuestionText IN ([Completion Date], [Gender],[PreCourse Info], [Application Process])) AS P; 

兩點意見:

  1. 你必須明確地指定要查看列的列表在輸出中。
  2. 你必須使用一些聚合功能。但是,我們實際上並不想在此計算任何聚合。相反,我們只想顯示Data列的內容。這就是爲什麼我使用MAX函數。它將工作假設對於給定的RecordIdQuestionText列中沒有重複。
+0

嗨米歇爾,感謝您的帖子,這完美的作品。我現在對列名稱的大小有問題,他們需要爲最終用戶報告保留相同的名稱。我現在要把它傳遞給我們的Web開發人員,因爲他已經說過他可以做到這一點,併爲我們的用戶提供前端。真的很感謝帖子如此及時和正確。 – Will