You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整DB2 SQL语句,实现含短编号或空字段时仅显示单行

调整DB2 SQL实现主编号唯一显示

需求:调整SQL语句,使每个主编号(如41031052-1)仅显示一行——若存在对应的短编号(dashonly)则显示带该值的行,若无则显示dashonly为空的行,避免同一主编号重复出现。

原SQL语句

Select Distinct TRIM(TRANSLATE(itnbr,' ','F')),
Case When t3.dashonly Is NULL Then '' Else t3.dashonly End As dashonly
From amflib1.itmrva t1
Join webprddt1.drawmext17 t2 On t2.afctdwg = t1.uu25
Left Join webprddt1.wqmssoadn t3 On t3.itemno = t1.itnbr
Where t2.recseq = '0060' Order By 1

当前查询结果

00001           DASHONLY
 --------------- ---------------
 41031052-1      
 41031052-1      -1             
 41031052-10     
 41031052-11     -11            
 41031052-11     
 41031052-12     
 41031052-12     -12            
 41031052-13     
 41031052-14     
 41031052-15     
 41031052-17

期望结果

00001           DASHONLY
 --------------- ---------------
 41031052-1      -1             
 41031052-10     
 41031052-11     -11            
 41031052-12     -12            
 41031052-13     
 41031052-14     
 41031052-15     
 41031052-17

解决方案

通过分组主编号字段,对dashonly取最大值(非空值优先级高于空字符串),实现每个主编号仅保留一行有效数据:

SELECT 
    TRIM(TRANSLATE(itnbr,' ','F')) AS item_number,
    MAX(CASE WHEN t3.dashonly IS NULL THEN '' ELSE t3.dashonly END) AS dashonly
FROM amflib1.itmrva t1
JOIN webprddt1.drawmext17 t2 ON t2.afctdwg = t1.uu25
LEFT JOIN webprddt1.wqmssoadn t3 ON t3.itemno = t1.itnbr
WHERE t2.recseq = '0060'
GROUP BY TRIM(TRANSLATE(itnbr,' ','F'))
ORDER BY 1

说明

  • 用GROUP BY替代DISTINCT,确保每个主编号唯一分组
  • MAX()函数会自动选取该分组下非空的dashonly值(若存在),没有则保留空字符串,正好匹配需求

内容的提问来源于stack exchange,提问作者Steve Dyke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:15:51