2017-01-03 9 views
0

これは以前の質問と似ているかもしれませんが、少し異なっています(フィールドid変数があります)効率的にSQLクエリを実行したり、POSTGRESで結合する方法はありますか?

私は次の表を持っています。

表1

ID1 YEAR1   
1  1980 
2  1964 
3  1910 

と私はこれらのテーブルを照会/参加したい2

ID2 YEAR2 VALUE FIELD ID 
1  2000  A  324 
1  1900  B  345 
2  1950  C  123 
2  1900  B  324 
3  2000  C  123 
3  1970  B  444 
4  1900  D  324 
4  1800  E  123 

表:表1試合で各ID1について

という名前の列を追加しますVALUE - 列名はA、B、...というようになり、列はTRUE(T)またはFALSE(F)のいずれかになります。

テーブル2のID2と一致するID1があり、ID2と一致するテーブル2のその特定の行のYEAR2がid1を与えたそのテーブル1からのYEAR1より小さい場合、列A ...はTRUEになります。表2からID2を持つ行の値がAを持っていたし、フィールドIDは、のいずれかであった次のように324または123

だから、結果表は次のようになります。

ありがとう...

ID1 YEAR1  A B C D E   

1  1980 F F F F F 
2  1964 F T T F F 
3  1910 F F F F F 

:)

+0

問題を解決するには、クロスジョインとケースを使用してみましたか? – Teja

+1

これは1時間前に投稿した質問の複製です。投票を終了する。 –

+0

慎重に読むことをお勧めする場合は、違いがあることがわかります。 – suprvisr

答えて

0
SELECT DISTINCT t1.id1, 
     t1.year1, 
     CASE WHEN t1.id1 = t2.id2 AND t2.value = 'A' AND t2.year2 <= t1.year1 THEN 'T' ELSE 'F' END AS A, 
     CASE WHEN t1.id1 = t2.id2 AND t2.value = 'B' AND t2.year2 <= t1.year1 THEN 'T' ELSE 'F' END AS B, 
     CASE WHEN t1.id1 = t2.id2 AND t2.value = 'C' AND t2.year2 <= t1.year1 THEN 'T' ELSE 'F' END AS C, 
     CASE WHEN t1.id1 = t2.id2 AND t2.value = 'D' AND t2.year2 <= t1.year1 THEN 'T' ELSE 'F' END AS D, 
     CASE WHEN t1.id1 = t2.id2 AND t2.value = 'E' AND t2.year2 <= t1.year1 THEN 'T' ELSE 'F' END AS E 
    FROM table1 t1 
INNER JOIN 
     table2 t2 
    ON t1.id1 = t2.id2; 
+0

ありがとうフィールドIDの部分についてはどうですか? – suprvisr

関連する問題