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

如何在Teradata SQL中按类别将行值提取至独立列?

行转列聚合查询实现方案

要将源表按id合并为单行,把AmtCategory对应的金额映射为指定列,可使用条件聚合的方式实现,这是跨数据库通用的写法:

SELECT
    id,
    -- 匹配AmtCategory=1,提取对应金额作为AmtPaid
    MAX(CASE WHEN AmtCategory = 1 THEN Amount END) AS AmtPaid,
    -- 匹配AmtCategory=2,提取对应金额作为AmtReturned
    MAX(CASE WHEN AmtCategory = 2 THEN Amount END) AS AmtReturned,
    -- 匹配AmtCategory=3,提取对应金额作为Fees
    MAX(CASE WHEN AmtCategory = 3 THEN Amount END) AS Fees
FROM 你的源表名称
GROUP BY id;

说明:

  • GROUP BY id 确保每个id仅返回一行数据;
  • CASE WHEN 会根据AmtCategory的值筛选对应金额,不匹配的行返回NULL;
  • 使用MAX()聚合函数是为了忽略NULL值,保留有效金额。如果同一id下同一分类有多条记录需要求和,把MAX()换成SUM()即可。

如果使用支持PIVOT语法的数据库(如SQL Server、Oracle),也可以用以下写法:

SELECT
    id,
    [1] AS AmtPaid,
    [2] AS AmtReturned,
    [3] AS Fees
FROM (
    SELECT id, AmtCategory, Amount FROM 你的源表名称
) AS 临时表
PIVOT (
    MAX(Amount)  -- 同样,需要求和就换成SUM(Amount)
    FOR AmtCategory IN ([1], [2], [3])
) AS 透视表;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 00:10:31