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

SQL中如何透视多行相似值为未知列且不丢失数据?

问题:透视指定列/表时如何避免丢失数据

背景与原有实现

我之前通过聚合函数MAX结合GROUP BY实现了按ID将多个CASE WHEN表达式的结果合并为单行,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

遇到的问题

现在发现一个问题:CASE WHEN中的判定条件(比如'foo')可能对应多行数据,每行的感兴趣列值各不相同,使用MAX/MIN这类聚合函数会丢失有用数据,而且我无法提前知晓每个判定条件对应的行数。

示例数据

IDvar_foreign_keycriteria_colcol_of_interest1col_of_interest2
x1foo01-01-2021100
x1foo01-06-20212000
x1foo01-08-20210
x1bar01-08-2021300

注:实际表包含唯一标识符/主键。

期望输出

IDvar_foreign_keyfoo_1_col_of_interest1foo_1_col_of_interest2foo_2_col_of_interest1foo_2_col_of_interest2foo_3_col_of_interest1foo_3_col_of_interest2
x101-01-202110001-06-2021200001-08-20210

补充思考

有人建议使用动态查询来解决这个问题,我也在考虑是否可以不依赖聚合函数实现这类透视,相关思路包括动态透视、无聚合的行转列实现等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:40:26