要么我过度思考,要么缺乏我的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
编辑:语法。
答案 0 :(得分: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 JOIN
而不是INNER JOIN
s。如果这样做,您可能还希望在select子句中的值上使用COALESCE()
函数,以便在没有匹配记录时显示除NULL
之外的其他内容。
答案 1 :(得分: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'