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

SQL分组查询修正:如何实现指定Target(L7)的统计输出?

修正后的SQL查询方案

你的查询存在两个核心问题:

  1. 字符串聚合时未过滤仅Target='L7'的Code,导致会聚合当前RepID下所有Code,不符合需求;
  2. CASE WHEN Target='L7'的逻辑在分组后不成立——每个RepID对应多条记录,直接引用Target会引发歧义或错误,无法正确判断该RepID是否存在L7目标。

以下是针对不同数据库的修正方案:

方案1:适用于SQL Server(使用STRING_AGG)

SELECT 
    RepID,
    STRING_AGG(CASE WHEN Target = 'L7' THEN Code END, ',') AS Code,
    CASE WHEN EXISTS (SELECT 1 FROM MyTable t2 WHERE t2.RepID = t1.RepID AND t2.Target = 'L7') THEN 1 ELSE 0 END AS TargetExist
FROM MyTable t1
GROUP BY RepID

方案2:适用于MySQL(使用GROUP_CONCAT)

SELECT 
    RepID,
    GROUP_CONCAT(CASE WHEN Target = 'L7' THEN Code END) AS Code,
    CASE WHEN SUM(CASE WHEN Target = 'L7' THEN 1 ELSE 0 END) > 0 THEN 1 ELSE 0 END AS TargetExist
FROM MyTable
GROUP BY RepID

方案3:适用于Access(使用Agg_Str)

SELECT 
    RepID,
    Agg_Str(CASE WHEN Target = 'L7' THEN Code END, ',') AS Code,
    CASE WHEN DCount("*", "MyTable", "RepID=" & RepID & " AND Target='L7'") > 0 THEN 1 ELSE 0 END AS TargetExist
FROM MyTable
GROUP BY RepID

关键修正点说明:

  • Code字段聚合:在字符串聚合函数内部嵌套CASE WHEN,仅将Target='L7'的Code纳入聚合,无符合条件的记录时返回NULL;
  • TargetExist字段判断:
    • 用EXISTS子查询检查当前RepID下是否存在Target='L7'的记录;
    • 或用SUM统计当前RepID下Target='L7'的记录数,大于0则标记为1,否则为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:46:18