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

如何使用PIVOT改写SQL查询,将结果展示为单行?

使用PIVOT改写SQL查询实现单行展示

没问题,我来帮你把这段SQL改写成用PIVOT的版本,这样就能把不同交易类型的金额都整合到同一行里,正好符合你的需求。

先理下原查询的逻辑:你通过CTE T1获取基础数据,T2按SId和TransType分组汇总金额,最后关联Master表用CASE语句生成对应类型的金额列。但原写法会因为TransType的不同产生多行记录,而PIVOT可以直接把行转列,一次性得到单行结果。

改写后的完整SQL如下:

WITH T1 AS (
    -- 保留你原有的EXT Code逻辑
    EXT Code
),
T2 AS (
    SELECT 
        p.SId, 
        p.TransType, 
        Amount = SUM(p.Amount) 
    FROM T1 p 
    GROUP BY p.SId, p.TransType
)
SELECT 
    m.SNo, 
    m.Name,
    -- 给PIVOT生成的列指定你需要的别名
    [PAYCM] AS 'GROSS CM',
    [PAYYTD] AS 'GROSS YTD',
    [TAXCM] AS 'Tax CM',
    [TAXYTD] AS 'Tax YTD'
FROM Master m
INNER JOIN (
    -- 对T2的分组结果进行PIVOT转换
    SELECT SId, TransType, Amount
    FROM T2
) t ON t.SId = m.Id  -- 注:原查询写的是t.PId = m.Id,这里按T2的字段调整为SId,若实际是PId可自行替换
PIVOT (
    SUM(Amount)
    -- 指定需要转成列的交易类型值
    FOR TransType IN ([PAYCM], [PAYYTD], [TAXCM], [TAXYTD])
) AS PivotTable;

关键说明:

  • PIVOT子句中,SUM(Amount)指定了要聚合的数值字段,FOR TransType IN (...)列出了需要转成列的交易类型值,这些值必须用方括号包裹(避免语法冲突)。
  • 我们将PIVOT转换后的结果与Master表关联,既能拿到SNo和Name,又能把转成列的金额字段重命名成你需要的格式。
  • 如果原查询的关联条件t.PId = m.Id不是笔误,你只需要把T2中的SId替换为PId即可保持逻辑一致。

这样改写后,每个SNo和Name都会对应唯一一行记录,四个金额列全部展示在同一行里,完全满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:59:22