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

SQL无聚合透视查询问题:同一MarkRange仅返回单个ITEM

解决SQL PIVOT查询中同一分数区间显示多个ITEM的问题

我来帮你搞定这个PIVOT只返回单个ITEM的问题~先理清楚你的场景和需求:

原始数据表(#unw)

ITEMMarkRange
ENG-MA20-39%
A1-01440-59%
A2-101-9%
15-6920-39%

期望的PIVOT结果

20-39%40-59%1-9%
ENG-MAA1-014A2-10
15-69

你遇到的核心问题是:用MAX(ITEM)做聚合时,同一MarkRange下只会保留一个ITEM,这是因为PIVOT的聚合函数会在单个分组里只取一个聚合后的值,多个ITEM直接被覆盖了。要解决这个问题,我们需要给每个分数区间内的ITEM分配行号,让同一区间的多个ITEM能分布在不同的行中。

修正后的SQL查询

SELECT [20-39%], [40-59%], [1-9%]
FROM (
    SELECT 
        ITEM, 
        MarkRange,
        -- 按MarkRange分组,给每个ITEM分配唯一行号
        ROW_NUMBER() OVER(PARTITION BY MarkRange ORDER BY ITEM) AS rn
    FROM #unw
) src
PIVOT (
    MAX(ITEM) 
    FOR MarkRange IN ([20-39%], [40-59%], [1-9%])
) piv;

代码逻辑说明

  1. 添加行号:通过ROW_NUMBER() OVER(PARTITION BY MarkRange ORDER BY ITEM),给每个MarkRange分组内的ITEM排序并分配行号,同一区间的多个ITEM会被标记为rn=1、rn=2...这样就把同一区间的ITEM拆分成了不同的分组。
  2. PIVOT聚合:现在PIVOT会基于rn(隐式分组)进行聚合,每个行号对应的每个MarkRange下只有一个ITEM,所以MAX(ITEM)就能准确取出对应的ITEM,不会再出现覆盖的情况。
  3. 修正列名:注意你之前的查询里写错了部分区间值(比如把1-9%写成1.9%),这里要和原始数据的区间值完全匹配,否则会取不到数据。

执行这段代码后,就能得到你想要的结果啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:17:30