2017-08-22 12 views
0

私はこのようになりますデータベースがあります。SQL Server Management Studio 2016で新しい列をピボットして追加しますか?

IndexID QuestionID AnswerGiven 
1  3   Phone 
1  7   Strongly Agree 
2  8   Agree 
2  5   Yes 
2  3   Chat 
3  6   NULL 
3  3   Phone 
4  3   Web 
4  7   Disagree 

をそして私はこのように、基本的にContactChannelと呼ばれる独自の列に質問#3を引き出すためのスクリプトを書きたい:

IndexID QuestionID ContactChannel AnswerGiven 
1  7   Phone   Strongly Agree 
2  8   Chat   Agree 
2  5   Chat   Yes 
3  6   Phone   Disagree 
4  7   Web    Disagree 

私は私はSQLに新しいが、これはピボットとサブクエリと関係があると思われますが、データベースごとに異なることがわかります。SSMS 2016のアイデアはありますか?

+0

使用しているデータベースにタグを付けてください。 –

+0

どの応募者がどの契約チャネルに参加するかをどのように決定しますか?インデックス番号ごとに@ XQbertである。 – xQbert

+0

それぞれのユニークなIndexIDはアンケートに対する回答です。ここで回答が9回ずつ繰り返されます。私はちょうどそれらの答えの1つをそれ自身の列に引っ張りたい。 – skathan

答えて

1

次のようなクエリを使用することができます。

SELECT t1.IndexID, t1.QuestionID, t2.AnswerGiven AS ContactChannel, t1.AnswerGiven 
FROM mytable AS t1 
LEFT JOIN mytable AS t2 ON t1.IndexID = t2.IndexID AND t2.QuestionID = 3 
WHERE t1.QuestionID <> 3; 

クエリはANSI SQLであり、いかなるRBDMSで動作するはずです。

Demo here

+0

これはうまくいきました。これはSQL初心者のためのより簡単で直接的な答えです。 – skathan

0

あなたはIndexIdがあたりquestionid = 3ごとに1つの行があると仮定すると、これを行うにはmaxウィンドウ関数を使用することができます。

select * from (
select indexid,questionid, 
max(case when questionid=3 then answergiven end) over(partition by indexid) as contactchannel, 
answergiven 
from tbl 
) t 
where questionid<>3