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

SQL查询返回两行需合并为单行并去0值,求解决方案

解决SQL多行结果合并为单行并去除0值的问题

嘿,这个问题我太熟悉了!咱们先拆解下问题根源:你的查询通过JOIN关联到了两条不同的srampos_discount_conditions记录——一条满足condition_method = 'condition_time',另一条满足condition_method = 'condition_date',所以数据库会把这两个匹配结果分别输出成两行。

要把它们合并成单行,同时去掉0值,我们可以用聚合函数+分组的思路来处理,具体来说就是用MAX()包裹每个CASE表达式,再通过GROUP BY把同个item_id的结果聚合到一行:

SELECT 
  MAX(CASE WHEN DI.item_type = 'in_list' AND DI.item_method = 'item_category' AND DC.condition_method ='condition_time' THEN 'TimeDiscount' ELSE NULL END) AS TimeDiscount,
  MAX(CASE WHEN DI.item_type = 'in_list' AND DI.item_method = 'item_category' AND DC.condition_method ='condition_date' THEN 'DateDiscount' ELSE NULL END) AS DateDiscount
FROM srampos_discount_item_list DIL 
JOIN srampos_discount_items DI ON DI.id = DIL.discount_item_id 
JOIN srampos_discounts D ON D.id = DI.discount_id 
JOIN srampos_discount_conditions DC ON D.id = DC.discount_id 
WHERE DIL.item_id =1
GROUP BY DIL.item_id;

为什么这么改?

  • 把ELSE 0改成ELSE NULL:NULL会被聚合函数忽略,比用0更合适(避免字符串和数字混合的潜在类型问题)
  • MAX()函数会自动提取每个字段下的非NULL有效值:针对TimeDiscount字段,只有匹配condition_time的那行有值,另一行是NULL,MAX会保留那个有效值;DateDiscount同理
  • GROUP BY DIL.item_id:确保同一个item_id的所有匹配结果被合并到一行

修改后你就能得到单行结果:TimeDiscount || DateDiscount,不会再出现0或者拆分的行啦。

内容的提问来源于stack exchange,提问作者Shiva Prakashan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:38:32