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

基于Case语句隐藏行:报表多条件查询行重复问题求助

解决报表查询中m_is_req为null的客户重复行问题

嘿,这个问题我之前做报表的时候也碰到过!核心原因是当m_is_req IS NULL时,你的表中同一个客户大概率对应多条关联记录,直接查询就会返回多行重复数据。咱们可以用拆分场景+合并结果的思路精准解决:

方案一:用UNION ALL拆分两种场景处理

把m_is_req = '1'的正常数据,和m_is_req IS NULL的去重数据分开查询再合并,既能保留所有需要的有效行,又能避免null场景的重复:

-- 1. 处理m_is_req = '1'的客户,返回完整字段
SELECT c_id, cv_id, 用药日期
FROM 你的报表表名
WHERE m_is_req = '1'

UNION ALL

-- 2. 处理m_is_req为null的客户,确保每个客户仅一行
SELECT DISTINCT c_id, cv_id, NULL AS 用药日期
FROM 你的报表表名
WHERE m_is_req IS NULL

关键细节说明:

  • 用UNION ALL而非UNION,因为它不会对整个结果集去重,性能更优(咱们已经在第二个查询里用DISTINCT控制了重复)
  • DISTINCT会自动去掉m_is_req IS NULL时同一个c_id+cv_id的重复行,保证每个客户只显示一次

方案二:如果cv_id存在多值,用聚合函数固定取值

如果同一个c_id在m_is_req IS NULL时对应多个不同的cv_id,而你只需要保留其中一个,可以用聚合函数(比如MAX/MIN)来指定取值规则:

SELECT c_id, MAX(cv_id) AS cv_id, NULL AS 用药日期
FROM 你的报表表名
WHERE m_is_req IS NULL
GROUP BY c_id

这样会为每个c_id取最大的cv_id,同时强制仅返回一行数据。

验证小技巧

你可以先单独运行第二个查询,确认m_is_req IS NULL的客户是否只返回一行,再和第一个查询合并,就能得到完全符合需求的报表结果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:52:37