加入DB2中的同一个表

时间:2012-02-23 13:31:30

标签: sql join db2

我有一张像

这样的表格
col1 col2 col3
abc  123  A
abc  345  B
def  567  A
ghi  890  B

我希望将一行中的数据与一个元素相关联。 Col3是鉴别元素。只有'A'和'B'行是相关的。结果应该看起来像

col1 col2A col2B
abc  123   345
def  567   --
ghi  --    890

我该怎么做?

2 个答案:

答案 0 :(得分:1)

使用自联接可能不是这种情况。这适用于您发布的数据:

select 
    col1,
    max(case col3 when 'A' then col2 else null end) col2A,
    max(case col3 when 'B' then col2 else null end) col2B
from YourTable
group by col1

当然,如果您有以下数据,它将会失败:

col1 col2 col3
abc  123  A
abc  345  B
abc  567  A

然后,不仅查询会失败,而且如果您有这样的数据,您的整个业务规则也会失败。

答案 1 :(得分:1)

此构造在SQL Server中有效。我没有一个DB2实例可以验证它是否也可以在那里工作,但语法是相当标准的。

SELECT t0.col1, t1.col2 AS col2A, t2.col2 AS col2B
FROM (SELECT DISTINCT col1 FROM mytable) as t0 -- Select the list of keys
LEFT OUTER JOIN mytable t1 ON t0.col1=t1.col1 AND t1.col3='A' -- Join for col2A
LEFT OUTER JOIN mytable t2 ON t0.col1=t2.col1 AND t2.col3='B' -- Join for col2B