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

SQL Unpivot使用问题:如何将多列转为Measure-Value行格式

修正Unpivot语句以包含Bone_Free列

你的问题核心是未将Bone_Free列纳入Unpivot的转换列表,导致它没有被转成[Measure]-[Value]的行结构。直接修改Unpivot子句,把Bone_Free和其他目标列放在一起即可。

示例修正代码

假设你的基础查询包含产品ID、批次号这类需要保留的字段,修正后的完整SQL如下:

SELECT 
    ProductID, -- 根据你的实际表结构调整保留字段
    BatchNo,
    Measure,
    Value
FROM (
    -- 先查出所有需要处理的列:保留字段 + 要转换的列
    SELECT 
        ProductID,
        BatchNo,
        Knee_Cap,
        Attached_Back,
        Bone_Free
    FROM DarkMeatFinishedProduct
) AS SourceTable
UNPIVOT (
    -- 把Knee_Cap、Attached_Back、Bone_Free全部纳入转换范围
    Value FOR Measure IN (Knee_Cap, Attached_Back, Bone_Free)
) AS UnpivotResult;

关键说明

  • 子查询SourceTable要确保包含所有需要转换的列(Knee_Cap、Attached_Back、Bone_Free)和你需要保留的非转换字段(比如ProductID、BatchNo)。
  • Unpivot的IN括号里必须列出所有要转为行的列名,这样这三列都会被转换成Measure列的取值,对应字段值存入Value列。

特殊情况处理

如果Bone_Free的数据类型和Knee_Cap、Attached_Back不一致,Unpivot会报错,需要先统一数据类型:

SELECT 
    ProductID,
    BatchNo,
    Measure,
    Value
FROM (
    SELECT 
        ProductID,
        BatchNo,
        CAST(Knee_Cap AS VARCHAR(50)) AS Knee_Cap,
        CAST(Attached_Back AS VARCHAR(50)) AS Attached_Back,
        CAST(Bone_Free AS VARCHAR(50)) AS Bone_Free
    FROM DarkMeatFinishedProduct
) AS SourceTable
UNPIVOT (
    Value FOR Measure IN (Knee_Cap, Attached_Back, Bone_Free)
) AS UnpivotResult;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:47:13