如何将单行多列的SQL查询结果转换为多行数据?
解决单行多列转多行的SQL需求
嘿,我明白你想把原本横向排列的MOE、MOD、MOU三类数据拆成纵向的多行记录,对吧?你的原查询会把所有类型的信息挤在一行里,这显然不是你想要的效果。
问题分析
你的原SQL在SELECT语句里重复定义了TYPE字段,同时GROUP BY包含了三个不同的PU字段(xx_PU_MOU、xx_PU_MOE、xx_PU_MOD),这会导致结果把不同类型的PU值都放在同一行,完全不符合你要的每行对应一个类型的格式。
解决方案:用UNION ALL拆分查询
我们可以把三个类型的查询分开写,每个查询只处理一种类型,然后用UNION ALL把结果拼接起来,这样就能得到每行对应一个TYPE的结构了。修改后的SQL如下:
SELECT 'MOE' AS TYPE, SUM(sdl.xx_MOE) AS [TOTAL], sdl.xx_PU_MOE AS PU FROM SaleDocumentLine sdl INNER JOIN Deal d ON sdl.DealId = d.Id WHERE d.id = 'CC1800679' AND sdl.LineType = 2 GROUP BY sdl.xx_PU_MOE UNION ALL SELECT 'MOD' AS TYPE, SUM(sdl.xx_MOD) AS [TOTAL], sdl.xx_PU_MOD AS PU FROM SaleDocumentLine sdl INNER JOIN Deal d ON sdl.DealId = d.Id WHERE d.id = 'CC1800679' AND sdl.LineType = 2 GROUP BY sdl.xx_PU_MOD UNION ALL SELECT 'MOU' AS TYPE, SUM(sdl.xx_MOU) AS [TOTAL], sdl.xx_PU_MOU AS PU FROM SaleDocumentLine sdl INNER JOIN Deal d ON sdl.DealId = d.Id WHERE d.id = 'CC1800679' AND sdl.LineType = 2 GROUP BY sdl.xx_PU_MOU
预期结果格式
执行上面的查询后,你会得到类似这样的结果:
| TYPE | TOTAL | PU |
|---|---|---|
| MOE | 100 | PU_MOE1 |
| MOD | 200 | PU_MOD1 |
| MOU | 150 | PU_MOU1 |
这样就完美实现了你想要的单行多列转多行的需求啦!
内容的提问来源于stack exchange,提问作者Cesar
相关产品推荐
相关产品推荐

