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

SQL Server多行转多列:按包装类型整合产品条码与尺寸

解决方案

目标表结构

最终输出表包含以下字段:

  • Product No:产品编号
  • Barcode:条码
  • UCC_Length:UCC包装类型对应的长度(无对应值时显示NA)
  • UCC_Width:UCC包装类型对应的宽度(无对应值时显示NA)
  • UPC_Length:UPC包装类型对应的长度(无对应值时显示NA)
  • UPC_Width:UPC包装类型对应的宽度(无对应值时显示NA)

SQL实现语句

WITH product_pkg_counts AS (
    -- 统计每个产品的包装类型数量
    SELECT 
        "Product No",
        COUNT(DISTINCT "Package Type") AS pkg_type_count
    FROM 
        product_table
    GROUP BY 
        "Product No"
),
filtered_products AS (
    -- 筛选符合要求的行:双包装类型仅留UCC,单包装类型保留原行
    SELECT 
        p."Product No",
        p."Barcode",
        p."Package Type",
        p."Length",
        p."Width"
    FROM 
        product_table p
    JOIN 
        product_pkg_counts c ON p."Product No" = c."Product No"
    WHERE 
        (c.pkg_type_count = 1) 
        OR (c.pkg_type_count = 2 AND p."Package Type" = 'UCC')
)
-- 转置包装类型的长宽为独立列
SELECT 
    "Product No",
    "Barcode",
    MAX(CASE WHEN "Package Type" = 'UCC' THEN "Length" ELSE 'NA' END) AS UCC_Length,
    MAX(CASE WHEN "Package Type" = 'UCC' THEN "Width" ELSE 'NA' END) AS UCC_Width,
    MAX(CASE WHEN "Package Type" = 'UPC' THEN "Length" ELSE 'NA' END) AS UPC_Length,
    MAX(CASE WHEN "Package Type" = 'UPC' THEN "Width" ELSE 'NA' END) AS UPC_Width
FROM 
    filtered_products
GROUP BY 
    "Product No", "Barcode";

逻辑说明

  1. 统计包装类型数量:通过CTE product_pkg_counts按产品编号分组,统计每个产品的包装类型总数,用来区分单/双包装类型的产品。
  2. 筛选目标行:在CTE filtered_products中,根据统计结果筛选数据——单包装类型的产品保留所有行,双包装类型的产品仅保留Package Type为UCC的行。
  3. 转置列格式:用CASE语句结合聚合函数MAX(),将不同包装类型的长宽值转置为独立列,无对应值的位置填充NA。

注:若Length和Width为数值类型,需将'NA'替换为数据库对应的空值标识(如NULL),后续可在结果展示时转换为NA;若允许文本类型,直接使用'NA'即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:20:45