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

如何将SQL查询结果按ITEM_ID合并为多列输出?

如何将多行USP记录转换为每行一个ITEM_ID的列格式?

问题背景

你当前执行的查询:

SELECT * FROM PIM_USP where item_ID IN (SELECT Item_ID from PIM_ITEM where PIM_ITEM.brick_ID=10002084)

得到的输出是每行对应一个USP条目:

ITEM_ID USP_NO Value
2616761 1 Type Bijtafel
2616761 2 Materiaal Steen
2616761 3 
2616761 4 
2616761 5 
5037554 1 Materiaal Geïmpregneerd hout
5037554 2 
5037554 3 

希望转换为每个ITEM_ID一行,不同USP_NO对应到USP1、USP2等列:

ITEM_ID USP1 USP2
2616761 Type Bijtafel Materiaal Steen
5037554 Materiaal Geïmpregneerd hout 

解决方案:条件聚合(跨数据库通用)

这是最通用的行转列方案,几乎所有主流数据库都支持,核心思路是用CASE语句结合聚合函数(比如MAX)把同一ITEM_ID的不同USP值聚合到一行:

SELECT
    ITEM_ID,
    -- 提取USP_NO=1的值作为USP1
    MAX(CASE WHEN USP_NO = 1 THEN Value END) AS USP1,
    -- 提取USP_NO=2的值作为USP2
    MAX(CASE WHEN USP_NO = 2 THEN Value END) AS USP2,
    -- 如果需要更多USP列,继续添加对应的CASE语句即可
    MAX(CASE WHEN USP_NO = 3 THEN Value END) AS USP3,
    MAX(CASE WHEN USP_NO = 4 THEN Value END) AS USP4,
    MAX(CASE WHEN USP_NO = 5 THEN Value END) AS USP5
FROM (
    -- 先获取需要的基础数据(关联PIM_USP和PIM_ITEM)
    SELECT pu.ITEM_ID, pu.USP_NO, pu.Value
    FROM PIM_USP pu
    INNER JOIN PIM_ITEM pi 
        ON pu.ITEM_ID = pi.Item_ID
    WHERE pi.brick_ID = 10002084
) AS usp_data
-- 按ITEM_ID分组,把同一物品的所有USP聚合到一行
GROUP BY ITEM_ID;

为什么用MAX?

因为每个ITEM_ID + USP_NO组合只会有一条记录,MAX(或者MIN、SUM都可以)的作用是过滤掉空值,把有效的Value保留到对应的列中,刚好符合你不需要显示空USP列的需求。

可选方案:使用PIVOT(部分数据库支持)

如果你的数据库支持PIVOT语法(比如SQL Server、Oracle),也可以用更简洁的写法:

SELECT ITEM_ID, [1] AS USP1, [2] AS USP2, [3] AS USP3, [4] AS USP4, [5] AS USP5
FROM (
    SELECT pu.ITEM_ID, pu.USP_NO, pu.Value
    FROM PIM_USP pu
    INNER JOIN PIM_ITEM pi 
        ON pu.ITEM_ID = pi.Item_ID
    WHERE pi.brick_ID = 10002084
) AS usp_data
PIVOT (
    MAX(Value)
    -- 指定要转成列的USP_NO值
    FOR USP_NO IN ([1], [2], [3], [4], [5])
) AS pivot_result;

不过这个方案的兼容性不如条件聚合,如果你需要跨数据库运行,优先选条件聚合的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:12:01