我有一张像
这样的表格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
我该怎么做?
答案 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