3

要么是我想太多,要么是我的 SQL 技能不足。我需要从第二个表向表中添加两列,但这些值位于第二个表的单独行中。什么 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

您可以使用不同的条件两次加入同一个表:

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'

根据您正在执行的操作,如果在某些情况下可能只有其中一个代码的数据,您可能需要使用LEFT JOINs 而不是s。INNER JOIN如果这样做,您可能还希望COALESCE()在 select 子句中的值上使用该函数来显示NULL没有匹配记录时以外的内容。

于 2013-09-11T16:16:58.583 回答
1

一种方法是JOIN使用非常有限的过滤器两次到表中:

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 回答