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

使用CASE语句进行数据透视时如何避免生成重复行?

问题解决方法

错误原因

你当前的写法使用DISTINCT是对查询返回的整行数据做去重,原始表中同一个ID对应多条购买记录时,每条记录生成的查询行的item_1/item_2/item_3字段的Y/N组合各不相同,DISTINCT无法把这些行合并,自然会出现同一个ID多行的情况。

通用解决写法

改用GROUP BY按ID分组,搭配聚合函数实现行转列,兼容绝大多数SQL数据库,参考代码如下:

select
  id,
  max(case when purchased_item = 'Item 1' then 'Y' else 'N' end) item_1,
  max(case when purchased_item = 'Item 2' then 'Y' else 'N' end) item_2,
  max(case when purchased_item = 'Item 3' then 'Y' else 'N' end) item_3
from my_table
group by id

实现原理

  • 按id分组后,同一个ID的所有原始记录会被聚合为一行
  • MAX函数作用于每个CASE语句的返回结果:如果该ID买过对应商品,CASE会返回至少一个Y,MAX就会取Y作为该字段的结果;如果从未购买对应商品,所有CASE都返回N,最终结果就是N,刚好符合数据透视的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:06:10