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

如何将单行多列的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

预期结果格式

执行上面的查询后,你会得到类似这样的结果:

TYPETOTALPU
MOE100PU_MOE1
MOD200PU_MOD1
MOU150PU_MOU1

这样就完美实现了你想要的单行多列转多行的需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:50:19