2010-12-03 73 views
1

我有以下查詢:我可以把它變成一個數據透視表嗎?

select q.description question, 
group_concat(a.description) answers 
from answer a 
join question q on a.question_id = q.id 
where survey_id = 6 
group by q.id 

它給了我一個結果,看起來是這樣的:

question    answers 
Do you like cats? Yes,Yes,No,Yes 
Do you like pizza? Yes,Yes,Yes,No 

有什麼辦法,我可以得到更多的東西一樣嗎?

question    answer1 answer2 answer3 answer4 
Do you like cats? Yes  Yes  No  Yes 
Do you like pizza? Yes  Yes  Yes  No 
+0

可能沒有。是否有固定數量的答案? – 2010-12-03 19:25:14

回答

0

是的,這是可能的,但需要動態SQL;

你可以看到一個相關的解決方案,可以擴展您的問題在這裏:Pivots with Dynamic Columns in SQL Server 2005

轉載部分下面,因爲我認爲這是非常酷:


此查詢的工作都SQL Server 2000和2005上。它是有效的,但有些可能不喜歡它,因爲它在任務的兩側使用相同的變量(@cols)。另一種僅適用於SQL Server 2005的解決方案是使用XML PATH。

DECLARE @cols NVARCHAR(2000) 
SELECT @cols = STUFF((SELECT DISTINCT TOP 100 PERCENT 
           '],[' + t2.ColName 
         FROM Table1 AS t2 
         ORDER BY '],[' + t2.ColName 
         FOR XML PATH('') 
        ), 1, 2, '') + ']' 

此列列表在我們旨在構造的數據透視查詢中使用了兩次。一旦它在我們想要檢索的列表中使用,並且一旦它被用作應該成爲列的值列表。

DECLARE @query NVARCHAR(4000) 
SET @query = N'SELECT tID, '+ 
@cols +' 
FROM 
(SELECT t2.tID 
     , t1.ColName 
     , t2.Txt 
FROM Table1 AS t1 
     JOIN Table2 AS t2 ON t1.ColId = t2.ColID) p 
PIVOT 
(
MAX([Txt]) 
FOR ColName IN 
('+ 
@cols +') 
) AS pvt 
ORDER BY tID;' 

執行此與

EXECUTE(@query) 

會給我們預期的結果:如果已經構造列的這個名單上面,我們就可以與像樞軸查詢的缺失部分串連成爲一個表並且顯示在表格中指定的列:

tID   Country Day  Month 
----------- ---------- ---------- ---------- 
1   US   4   July 
2   US   11   Sep 
3   US   25   Dec 
相關問題