2

列が繰り返されるテーブルを転置することは可能ですか?

既存のテーブル:

user_id    question_id   body 
1          1             'Text1 1'
1          1             'Text1 1-2'
1          2             'Text1 2'
1          3             'Text1 3'
2          1             'Text2 1'
2          2             'Text2 2'

に基づくクロス集計またはソリューション

MAX(CASE WHEN r.question_id = 1 THEN r.body ELSE NULL END) AS 'question1'

繰り返される属性の最後の一致は常に一致するため、このシナリオには適用されません。

質問の本文で検索を実行したいのですが、転置された表がないと方法がわかりません。
たとえば、user_id を見つけたいのですが、question1='...' AND question2='...'

4

1 に答える 1

1

これは関係分割の場合です。必要なものを取得するための 2 つのクエリ手法の例:

SELECT user_id
FROM   tbl
WHERE  question_id = 1
AND    body = 'Text1 1'

INTERSECT
SELECT user_id
FROM   tbl
WHERE  question_id = 2
AND    body = 'Text1 2';

または:

SELECT t1.user_id
FROM   tbl t1
JOIN   tbl t2 USING (user_id)
WHERE  t1.question_id = 1
AND    t1.body = 'Text1 1'
AND    t2.question_id = 2
AND    t2.body = 'Text1 2';

-> sqlfiddle デモ

この関連する質問の下でさらに多くを見つけてください:
How to filter SQL results in a has-many-through relationship

crosstab()追加モジュールtablefuncからは、変更された方法でデータを表示する方法にすぎません。しかし、クエリ手法を探しています。表示の問題ではありません。SO の here
の多くの例も、 this one のような検索で見つけることができます。crosstab()

于 2012-12-19T17:28:19.087 に答える