SQL行转列需求:将RollupCatCd值转为JobCd对应列
实现SQL行转列需求
你可以直接通过SQL的行转列功能完成数据格式转换,无需手动创建透视表或使用VLOOKUP。以下提供两种适用于SQL Server的方案:
方案1:CASE WHEN + 分组聚合(兼容性强)
SELECT JobCd, MAX(CASE WHEN RollupCatCd = 'CRP' THEN RollupCd END) AS CRP, MAX(CASE WHEN RollupCatCd = 'DIV' THEN RollupCd END) AS DIV, MAX(CASE WHEN RollupCatCd = 'GRP' THEN RollupCd END) AS GRP, MAX(CASE WHEN RollupCatCd = 'REG' THEN RollupCd END) AS REG FROM [Gorilla].[dbo].[jobCtrl_Rollup] WHERE CurrentYN = '1' GROUP BY JobCd ORDER BY JobCd;
- 逻辑:通过
GROUP BY JobCd将同一JobCd的记录聚合,用CASE WHEN匹配对应的分类码,提取对应的RollupCd值;MAX函数用于自动忽略NULL值,保留有效数据。
方案2:SQL Server PIVOT运算符(语法简洁)
SELECT JobCd, CRP, DIV, GRP, REG FROM ( -- 先筛选出需要的基础数据 SELECT JobCd, RollupCatCd, RollupCd FROM [Gorilla].[dbo].[jobCtrl_Rollup] WHERE CurrentYN = '1' ) AS SourceData PIVOT ( -- 对RollupCd取聚合值(因每个JobCd+分类码唯一,MAX/MIN效果一致) MAX(RollupCd) -- 指定要转成列的字段和具体列值 FOR RollupCatCd IN (CRP, DIV, GRP, REG) ) AS PivotTable ORDER BY JobCd;
- 逻辑:子查询先获取过滤后的基础数据,
PIVOT运算符直接将RollupCatCd的指定值转为列名,自动完成数据映射。
两种方案均可直接输出你期望的格式,替代繁琐的手动数据整理步骤。
内容的提问来源于stack exchange,提问作者ChrsKslr
相关产品推荐
相关产品推荐

