3

これを考えすぎているか、SQL スキルが不足しています。2 番目のテーブルからテーブルに 2 つの列を追加する必要がありますが、値は 2 番目のテーブルの別々の行にあります。これを行うSQLは何ですか?これが例です。transnumは、テーブル間の共通の列です。

TABLE1
------
transnum  id
9287      006
5782      004
5819      001

TABLE2
------
transnum  code  value
9287      A     198.38
9287      B     928.57
9287      C     568.25  -- code C values not needed
5782      A     219.53
5782      B     591.11
5782      C     852.32
5819      A     109.92
5819      B     251.81
5819      C     295.12

DESIRED RESULT
--------------
transnum  id    valueA  valueB
9287      006   198.38  928.57
5782      004   219.53  591.11
5819      001   109.92  251.81

編集:文法。

4

2 に答える 2

2

異なる基準で同じテーブルに 2 回参加できます。

SELECT t1.TransNum, t1.id, t2_A.value "ValueA", t2_B.value "ValueB"
FROM Table1 t1
INNER JOIN Table2 t2_A ON t2_A.transnum = t1.transnum AND t2_A.code = 'A'
INNER JOIN Table2 t2_B ON t2_B.transnum = t1.transnum AND t2_B.code = 'B'

コードの 1 つのデータしかない場合は、何をしているかによって、LEFT JOINs の代わりにs を使用する必要がある場合があります。INNER JOINその場合、select 句の値に対して関数を使用して、一致するレコードがない場合COALESCE()以外の何かを表示することもできます。NULL

于 2013-09-11T16:16:58.583 に答える
1

1 つのアプローチはJOIN、非常に有限のフィルターを使用して、テーブルを 2 回使用することです。

SELECT t1.transum, t1.id, t2.value AS valueA, t3.value AS valueB
FROM table1 t1
    JOIN table2 t2 ON t2.transum = t1.transum AND t2.code = 'A'
    JOIN table3 t3 ON t3.transum = t1.transum AND t3.code = 'B'
于 2013-09-11T16:16:53.687 に答える