Teradata/SQL 对列求和
Teradata/SQL sum together columns
我想查询 return 两个金额。我想将它们加在一起,同时保留一个,因为它是 return 由查询编辑的。
例如:
DESC | sum(AMOUNT)
A | -61149025.940000
B | -9696.910000
B需要是B和A之和,并替换当前值。 A 保持查询结果不变。
我的SQL是这样的:
Select SQ.DESC, SUM(SQ.AMOUNT)
FROM (subquery) SQ
GROUP by SQ.DESC
我的 return 结果是
DESC | sum(AMOUNT)
A | -61149025.940000
B | -61158722.850000
我无法从逻辑上理解这一点
如果你想"B"是所有值的总和,你可以使用window函数:
Select SQ.DESC,
(CASE WHEN SQ.DESC = 'A' THEN SUM(SQ.AMOUNT)
WHEN SQ.DESC = 'B' THEN SUM(SUM(SQ.AMOUNT)) OVER ()
END) as SUM_AMOUNT
FROM (subquery) SQ
GROUP by SQ.DESC
注意:即使 Teradata 允许 DESC
作为列名,这也是一个糟糕的选择,因为 DESC
是 SQL 关键字(想想 ORDER BY
)。
我想查询 return 两个金额。我想将它们加在一起,同时保留一个,因为它是 return 由查询编辑的。
例如:
DESC | sum(AMOUNT)
A | -61149025.940000
B | -9696.910000
B需要是B和A之和,并替换当前值。 A 保持查询结果不变。
我的SQL是这样的:
Select SQ.DESC, SUM(SQ.AMOUNT)
FROM (subquery) SQ
GROUP by SQ.DESC
我的 return 结果是
DESC | sum(AMOUNT)
A | -61149025.940000
B | -61158722.850000
我无法从逻辑上理解这一点
如果你想"B"是所有值的总和,你可以使用window函数:
Select SQ.DESC,
(CASE WHEN SQ.DESC = 'A' THEN SUM(SQ.AMOUNT)
WHEN SQ.DESC = 'B' THEN SUM(SUM(SQ.AMOUNT)) OVER ()
END) as SUM_AMOUNT
FROM (subquery) SQ
GROUP by SQ.DESC
注意:即使 Teradata 允许 DESC
作为列名,这也是一个糟糕的选择,因为 DESC
是 SQL 关键字(想想 ORDER BY
)。