如何使用Case语句将多行数据合并到单列中?
问题分析
你当前的SQL写法是逐行生成拼接字符串,再按拼接结果分组,这会导致每个不同的行输出一条独立结果,无法实现按PRD_ID聚合合并的需求。
解决方案
核心思路是先按PRD_ID分组,分别提取每个容器层级对应的QTY值(无值则用0替代),再按4到1的顺序拼接成目标格式:
SELECT PRD_ID, CONCAT( ISNULL(dbo.FBE_GetThousandSeparator(MAX(CASE WHEN CONTAINER_LVL = 4 THEN QTY END), 0), '0'), '/', ISNULL(dbo.FBE_GetThousandSeparator(MAX(CASE WHEN CONTAINER_LVL = 3 THEN QTY END), 0), '0'), '/', ISNULL(dbo.FBE_GetThousandSeparator(MAX(CASE WHEN CONTAINER_LVL = 2 THEN QTY END), 0), '0'), '/', ISNULL(dbo.FBE_GetThousandSeparator(MAX(CASE WHEN CONTAINER_LVL = 1 THEN QTY END), 0), '0') ) AS QTY FROM #TMP2 GROUP BY PRD_ID
代码说明
- 提取各层级QTY:
MAX(CASE WHEN CONTAINER_LVL = N THEN QTY END)会针对每个PRD_ID,提取对应层级的QTY值(每个层级仅一行数据,MAX直接取到目标值,无数据则返回NULL)。 - 处理空值:用
ISNULL(..., '0')将NULL替换为'0',保证无值时显示0。 - 拼接字符串:通过
CONCAT按4→3→2→1的顺序拼接,用'/'分隔各值,最终生成目标格式。 - 分组逻辑:仅按
PRD_ID分组,确保每个产品仅输出一行合并结果。
内容的提问来源于stack exchange,提问作者batwing
相关产品推荐
相关产品推荐

