sql - 如何在 Oracle 中使用分组集重命名列
问题描述
我使用分组集计算总金额
SELECT
CASE
WHEN GROUPING(Name) = 1 THEN 'TOTAL' ELSE Name END,
ID,
SUM(Amount)
FROM Table1 GROUP BY GROUPING SETS ( (ID, Name), (ID) );
我会得到这样的东西
ID Name Amount
11 company1 100
11 company1 200
11 TOTAL 300
22 company2 100
22 company2 200
22 TOTAL 300
但我想将名称“TOTAL”更改为“comany1 -total”或“company2-total”,例如
ID Name Amount
11 company1 100
11 company1 200
11 company1-TOTAL 300
22 company2 100
22 company2 200
22 company2-TOTAL 300
有可能这样做吗?我坚持了一段时间。谢谢!!!
解决方案
这将为您提供您想要的分组集:
with test_table as (
select 11 ID, 'company1' Name, 100 Amount from dual union all
select 11 ID, 'company1' Name, 200 Amount from dual union all
select 22 ID, 'company2' Name, 100 Amount from dual union all
select 22 ID, 'company2' Name, 200 Amount from dual
)
SELECT
CASE
WHEN GROUPING(AMOUNT) = 1 THEN NAME||'-TOTAL' ELSE Name END,
ID,
SUM(Amount)
FROM test_table
GROUP BY GROUPING SETS ( (ID, Name, AMOUNT), (ID, NAME));
这是另一种方式:
with test_table as (
select 11 ID, 'company1' Name, 100 Amount from dual union all
select 11 ID, 'company1' Name, 200 Amount from dual union all
select 22 ID, 'company2' Name, 100 Amount from dual union all
select 22 ID, 'company2' Name, 200 Amount from dual
)
select id, name, amount from (
SELECT
ID,
name,
Amount
FROM test_table
union all
select id, name || '-TOTAL', sum(amount) from test_table group by id, name || '-TOTAL'
) order by id, name, amount
;
推荐阅读
- python - 无法在 Windows 上运行的 pyCharm 中安装密码学和 pynacl 库
- python - 有没有一种惯用的 panda 方法可以从代表开始和停止信号的 2 个列表中获取索引
- javascript - 事件方法上的jQuery不会触发
- makefile - 仅忽略来自 GNU make 的先决条件构建输出
- c++ - 抛出 'OC::OCException' 的实例后调用终止
- neo4j - Neo4j 密码查询从 6ms 间歇性地慢到 70ms
- amazon-web-services - 带有 Terraform 的 AWS ECS 是否损坏?
- ios - 使用嵌套子查询过滤领域
- typescript - 打字稿:为什么“typeof”运算符的结果与文字正确比较,而与常量比较不正确?
- java - 即使可以为空的解决方案在 VRS 中也可以,不允许硬性规则中断