2010-12-03 8 views
1

I次のクエリを持っている:これをピボットテーブルにすることはできますか?

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

私はもっとこのような何かを得ることができますどのような方法があります:

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    answer1 answer2 answer3 answer4 
Do you like cats? Yes  Yes  No  Yes 
Do you like pizza? Yes  Yes  Yes  No 
+0

おそらく、一定量の回答がありますか? –

+0

mysqlにアクセスするフレームワークなどは何ですか?しかし、生の調査データ(集計されていない)を出力する目的はわかりません。 4人の参加者しかいませんか? – Flinsch

+0

おそらくいいえ...サブクエリ – ajreal

答えて

0

はい、可能ですが、動的SQLが必要です。


このクエリは、SQL Server 2000および2005の両方で動作します。私はそれは非常にクールだと思うので、 Pivots with Dynamic Columns in SQL Server 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, '') + ']' 

この列リストは、私たちが構築しようとしているピボットクエリで2回使用されます。取得したい列のリストで一度使用すると、列の値のリストとして使用されます。上記の列のリストを構築し、我々は同じようにピボットクエリの足りない部分とそれを連結することができた:表:

EXECUTE(@query) 

でこれを実行する

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;' 

することは私たちに期待される結果が得られますテーブルに指定された列が表示されます。

tID   Country Day  Month 
----------- ---------- ---------- ---------- 
1   US   4   July 
2   US   11   Sep 
3   US   25   Dec 
関連する問題