在DB2SQL中获取一个键的记录,但显示一个单独键的值



所以我有一个表,它有一个SHIP#&参考编号。每个SHIP#有两个REF#代码,即BM和PO。BM字段是必需的,但PO字段只有在用户实际输入内容时才会填充。因此,一个基本的选择会显示这样的内容:

SHIP#           REF#    VALUE
000002          BM      20001836                      
000002          PO      020                           
000003          BM      20001834                      
000003          PO      8-694                         
000004          BM      20001835                      

现在,您会注意到,发货000004只有BM,没有PO。

我想显示所有带有PO值的发货。因此,如果PO值为空或不存在(如情况"000004"(,则应简单地输入"-"。由于BM是强制性的,您必须获得BM存在的所有记录,但显示PO字段的值。

因此,输出应该是:

SHIP#           REF#    VALUE                     
000002          PO      020                           
000003          PO      8-694                         
000004          PO      -  

如果你需要更多的澄清,请告诉我。谢谢

针对自身的外部联接也可以完成这项工作。例如:

select a.ship, 'PO' as ref, coalesce(b.value, '-') as value
from t a
left join t b on b.ship = a.ship and b.ref = 'PO'
where a.ref = 'BM'

结果:

SHIP    REF  VALUE
------  ---  -----
000002  PO   020
000003  PO   8-694
000004  PO   -

请参阅db<gt;不停摆弄

编辑-只查找没有PO的BM

您可以使用相同的查询并在其中添加额外的谓词and b.ship is null,如:

select a.ship, 'PO' as ref, coalesce(b.value, '-') as value
from t a
left join t b on b.ship = a.ship and b.ref = 'PO'
where a.ref = 'BM' 
and b.ship is null

结果:

SHIP    REF  VALUE 
------- ---- ----- 
000004  PO   -     

请参阅db<gt;不停摆弄

您可以使用聚合:

select ship#, 'PO' as ref#,
max(case when ref# = 'PO' then value end) as value 
from t
group by ship#

这会将value返回为NULL——这似乎是一个非常好的选择。如果你真的想要'-',那么使用COALESCE():

select ship#, 'PO' as ref#,
coalesce(max(case when ref# = 'PO' then value end), '-') as value 
from t
group by ship#

相关内容

  • 没有找到相关文章

最新更新