SQL组记录但在组中显示不为空

时间:2016-03-03 23:36:16

标签: sql oracle11g

我有两个表TabA,TabB 我有兴趣将它们连接在一起,以便结果与TabA具有相同数量的记录,并且它仅从TabB加入非NULL值。那就是说

TabA
field1 field2
1      valone
1      valtwo
2      valone
3      valone

TabB
field3 field4, field5
1      NULL    test3
1      test1   NULL
2      test2   NULL

我想要的结果是:

field1 field2 field4 field5
1      valone test1  test3
1      valtwo test1  test3
2      valone test2  NULL
3      valone NULL   NULL

到目前为止我已经

SELECT TabA.field1, TabA.field2, TabA.field4
FROM TabA
LEFT JOIN TabB ON TabA.field1 = TabB.field3

但是,这并没有考虑到我想要返回与TabA中相同数量的行的事实。

1 个答案:

答案 0 :(得分:1)

您的问题有两种常见方法。一种是使用多个outer joins

select a.field1, a.field2, b.field4, b2.field5
from TabA a
    left join TabB b on a.field1 = b.field3 and b.field4 is not null
    left join TabB b2 on a.field1 = b2.field3 and b2.field5 is not null

如果TabB有多条记录field4field5不是每field3为空,则可能会返回多个结果。

要消除重复,另一个选择是使用conditional aggregation

select a.field1, a.field2,
       max(case when b.field4 is not null then b.field4 end) field4,
       max(case when b.field5 is not null then b.field5 end) field5
from TabA a
     left join TabB b on a.field1 = b.field3
group by a.field1, a.field2

如果存在多条记录,则只会在TabA中为每条记录返回一行,但field4和/或field5可能不是您想要的。取决于您当时的预期结果。

如果重复不是问题,那么两种解决方案都应该产生您想要的结果。