SQLManagementStudioを使用してピボットアウトする必要のあるテーブルがあります。この特定の例はSQLExpressサーバー上にありますが、これを適用する2008r2サーバー上にも同様のテーブルがあります。
この表には、調査の結果(50以上の質問と数百のGuestID)が含まれています。ピボットするのはかなり簡単ですが、私は複数の選択肢の質問と回答がテーブルに入力される方法で問題にぶつかりました。
私のテーブルは次のようになります。
GuestID Question Answer
1 How old are you? 30
1 Do you own a car? Yes
1 Why do you own a car? Convenience
1 Why do you own a car? To get the girl
1 Why do you own a car? So I can go through the drive-thru
私はこれにピボットしたい(...短くするために):
GuestID How old..? Do you own...? Why do...? Why do...? Why do...?
1 30 Yes Convenience To get... So I can go...
または、理想的には、答えを組み合わせてこれにピボットします。
GuestID How old..? Do you own...? Why do...?
1 30 Yes Convenience, To get..., So I can...
私が現在取り組んでいるステートメントは次のとおりです。
declare @QuestionList as varchar(max)
select @QuestionList =
stuff(
(
select DISTINCT ',[' + RIGHT(Question,128) + ']'
from AnnualSurveyAnswers
where GuestId = 43
for xml path ('')
),1,1,'')
declare @dynamic_PQ as varchar(max)
set @dynamic_PQ = 'select [GuestID], ' + @QuestionList +
'from
(
Select [GuestID],RIGHT([Question],128)AS Question,[Answer]
From dbo.AnnualSurveyAnswers
) as S
PIVOT
(
MAX([Answer])
for Question IN (' + @QuestionList + ')
) as P
'
Exec(@dynamic_PQ)
結果:
GuestID How old...? Do you own...? Why do you...?
1 30 Yes Convenience
2 35 Yes To get the girl
列が複数回指定されているというエラーを受け取ったため、追加DISTINCT
する必要がありました。@QuestionList
理にかなっています。同じ名前の列を複数持つことはできません。ただし、を使用するとDISTINCT
、選択式の回答のうち1つだけが表示されるようになりました。MAX
また、集計要件をカバーするために追加しました[Answer]
が、別のものを使用する必要がありますか?
複数の選択肢の質問があり、それらには1つの回答または8つの回答が含まれる場合があります。元のデータを変更する以外のオプションはありますか?