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

如何将多CASE WHEN表达式的查询结果按ID合并为单行?

问题

为实现多条件SELECT查询结果合并,我使用了以下SQL语句:

SELECT table1.IDvar,
(CASE WHEN table2.var1 = 'foo' THEN table2.var2 END) AS condition1,
(CASE WHEN table2.var1 = 'bar' THEN table2.var2 END) AS condition2
FROM table1
FULL JOIN table2 ON table1.IDvar = table2.table1_IDvar

但该语句返回的结果中每个ID对应多行数据,而非将各条件结果列置于同一行,示例结果如下:

IDvarcondition1condition2
x12(null)
x1(null)(null)
x1(null)33
h21000(null)
h2(null)(null)
h2(null)(null)
z3(null)0
z3300(null)
z3(null)(null)

注:每个ID对应的行数并不相等。

需要将不同CASE WHEN表达式的查询结果按唯一ID合并到同一行,得到如下格式的输出:

IDvarcondition1condition2
x1233
h21000(null)
z33000
解决方案

要实现按ID合并行,需要用聚合函数配合CASE WHEN,再通过GROUP BY按ID分组。聚合函数(如MAX)会忽略NULL值,提取每个ID下对应条件的有效数据,最终将同一ID的多行合并为一行。

修改后的SQL语句如下:

SELECT 
    table1.IDvar,
    MAX(CASE WHEN table2.var1 = 'foo' THEN table2.var2 END) AS condition1,
    MAX(CASE WHEN table2.var1 = 'bar' THEN table2.var2 END) AS condition2
FROM table1
FULL JOIN table2 ON table1.IDvar = table2.table1_IDvar
GROUP BY table1.IDvar

说明

  • MAX()函数:针对每个ID,取CASE WHEN结果中的非NULL值,因为同一ID下每个条件只会有一个有效非NULL值(或全为NULL),MAX能精准提取该值。
  • GROUP BY table1.IDvar:将所有同一ID的行分组,确保每个ID只返回一行结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:35:27