0

次のようなデータの表があります。回答は常にユーザーから6ブロックで送信されます。誰かが質問ID1に「1」と答えた場合、たとえば、質問4に何を答えたかを知る必要があります。たとえば、質問2に1と答えた場合は、質問5に答える必要があり、質問3に1と答えた場合は、質問6に答えてください。

user   questionID    response
1      1             2
1      2             3
1      3             1
1      4             5
1      5             5
1      6             2
2      1             1
2      2             6
2      3             3
2      4             3
2      5             2
2      6             5

私はこれについていくつかの助けを借りて本当にすることができました。どうもありがとう

4

2 に答える 2

0

それはあなたが必要なものですか?このクエリを実行してみてください。

select u1.*, u2.response from users u1
left join users u2
on u1.user = u2.user and u1.questionID = u2.questionID - 3
where u1.response = 1

substring('inp1' FROM 4)は1を与えます:

select u1.*, u2.response from users u1
left join users u2
on u1.user = u2.user and
  substring(u1.questionID FROM 4) = substring(u2.questionID FROM 4) - 3
where u1.response = 1
于 2012-12-07T20:52:54.593 に答える
0

すべての答えをまとめる「ピボット」が必要だと思います。

select
  t1.response as response1,
  t2.response as response2,
  t3.response as response3,
  t4.response as response4,
  t5.response as response5,
  t6.response as response6
from mytable t1
left join mytable t2 on t1.user = t2.user and t2.questionId = 2
left join mytable t3 on t1.user = t3.user and t3.questionId = 3
left join mytable t4 on t1.user = t4.user and t4.questionId = 4
left join mytable t5 on t1.user = t5.user and t5.questionId = 5
left join mytable t6 on t1.user = t6.user and t6.questionId = 6
where t1.user = ?

これをビューにして列として追加するt1.userと、ユーザー=?のビューから選択できます。

于 2012-12-07T20:58:01.583 に答える