0

データベースにいくつかのテーブルがあり、いくつかのテーブルからいくつかの列を選択したいのですが、これで問題ありません。ここで、3番目のテーブルがあり、このテーブルには異なるテキスト値を持つ列がありますが、たとえば、次のように、異なるユーザーの同じ少数の「text_values」があります。

table3

row userid  text_value  value
1   user1   text1       value1
2   user1   text2       value2
3   user2   text1       value3
4   user3   text1       value4
...

ここで、Table1からINFO1とINFO2を取得し、Table2からINFO3とINFO4を取得しますが、text_value = text1であるTable3からすべての値を取得し、これをINFO5で5番目の列にし、次に、text_valueであるTable3から値を取得します。 = text2とし、これをINFO6の6番目の列にします。

次のクエリがあります。INFO5列のみが必要な場合は正常に機能します。

SELECT Table1.INFO1, Table1.userid , Table2.INFO2,
Table1.INFO3, Table2.INFO4,
Table3.value AS INFO5
FROM Table1 LEFT OUTER JOIN Table2 ON Table1.userid = Table2.userid 
LEFT OUTER JOIN Table3 ON Table1.userid = Table3.userid 
WHERE Table3.text_value = 'text1' 

ただし、同じtable3 VALUE列の値を使用して別の列を作成したいのですが、TEXT_VALUE ='text2'の場合(「フィルタリング」するテキストがいくつかあるため、これは「text3」、「text4」にも当てはまります) 。

クエリを次のように変更すると、機能しません。

SELECT Table1.INFO1, Table1.userid , Table2.INFO2,
Table1.INFO3, Table2.INFO4,
Table3.value AS INFO5 WHERE Table3.text_value = 'text1' 
Table3.value AS INFO6 WHERE Table3.text_value = 'text2' 
FROM Table1 LEFT OUTER JOIN Table2 ON Table1.userid = Table2.userid 
LEFT OUTER JOIN Table3 ON Table1.userid = Table3.userid 

任意のガイダンスをいただければ幸いです。

4

3 に答える 3

1

あなたはCASEそこに必要です:

SELECT  Table1.INFO1, 
        Table1.userid, 
        Table2.INFO2,
        Table1.INFO3, 
        Table2.INFO4,
        CASE WHEN Table3.text_value = 'text1' THEN Table3.value END AS INFO5 
        CASE WHEN Table3.text_value = 'text2' THEN Table3.value END AS INFO6 
FROM Table1 
LEFT OUTER JOIN Table2 
    ON Table1.userid = Table2.userid 
LEFT OUTER JOIN Table3 
    ON Table1.userid = Table3.userid 
于 2013-02-07T18:47:58.070 に答える
0

whereステートメントが間違った場所にあります。結合後でなければなりません:

主なSQL構文は次のようになります。

SELECT Table1.INFO1, Table1.userid , Table2.INFO2,
Table1.INFO3, Table2.INFO4,
Table3.value AS INFO5 
Table3.value AS INFO6 
FROM Table1 LEFT OUTER JOIN Table2 ON Table1.userid = Table2.userid 
LEFT OUTER JOIN Table3 ON Table1.userid = Table3.userid 
WHERE Table3.text_value = 'text1' 
and Table3.text_value = 'text2' 
于 2013-02-07T18:47:10.817 に答える
0

caseステートメントの代わりにピボット機能を使用することもできます。不要な結合なしでテーブル3にInfo#を追加したい場合は、スケーリングできます。

http://sqlfiddle.com/#!3/789c8/1

于 2013-02-07T19:20:29.463 に答える