2013-01-15 60 views
0

我有一個包含了一系列的調查回覆,結構像這樣的表:移調SQL表時的值是文本

Question Category | Question Number | Respondent ID | Answer 

這似乎爲數據最合乎邏輯的存儲。 Question Category,Question NumberRespondent ID的組合是獨特的。

問題是,我被要求提供一個以Respondent ID作爲列的報告,其中Answer作爲行。由於Answer是自由文本,數字預期PIVOT命令不起作用。如果每行都是特定的Question Category/Question Number配對,那麼將會很好,因此所有信息都顯示在一個表中。

這可能嗎?我猜測需要一定數量的動態SQL,特別是在預期的50多次調查顯示時。

+0

你可以張貼一些示例數據和預期的結果?一個'PIVOT'使用一個聚合函數,這不限於數值。 – Taryn

回答

0

我想這個任務應該由您的客戶端代碼來完成 - 試圖做的SQL一邊這種變調是不是很不錯的主意。這樣的SQL(即使可以構建)可能會非常複雜和脆弱。

首先,你應該算多少不同的答案都在那裏 - 你可能不想寬1000列上創建報告,如果所有答案都不同。此外,你可能想確保答案很窄 - 如果有人給出了非常糟糕的1KB寬答案呢?

然後,您應該構建您的報告(那會是HTML或別的東西)動態地根據你的標準,非轉SQL的結果。

例如,在HTML中,您可以根據需要創建任意數量的列,對錶格標題使用<th>column</th>,對數據單元格使用<td>value</td> - 只要您知道輸出結果中將有多少列即可。

0

對我來說,似乎問題是列數。你不知道有多少受訪者。

一個想法是串聯的受訪者的ID。您可以在SQL Server這樣做,因爲:

select distinct Answer, 
     (select cast(RespondentId as varchar(255))+'; ' 
     from Responses r2 
     where r2.Answer = r.Answer 
     for xml path ('') 
     ) AllResponders 
from Responses r 

(這是未經測試,可能有語法錯誤)

0

如果報告服務或excel電力樞紐爲報表的可能性,然後他們可以既可能完成的任務你比直接的sql查詢更容易。在RS中,您可以使用Tablix,並以電源方式支持數據透視表。這兩個都避免了必須在一個sql語句中定義你的pivot列,並且兩者都可以動態地從列表結果集中確定列名。