在Oracle SQL中,只对特定条件下的字段进行求和。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Oracle SQL中,只对特定条件下的字段进行求和。相关的知识,希望对你有一定的参考价值。
我想从一个表格中获取金额,我想将满足特定条件的一些金额相加,同时保留其他未相加的金额,如果它不满足条件的话。
我尝试了这个解决方案,但即使满足条件,仍然不能求和。
SELECT
price_type,
CASE trim(price_type)
WHEN 'TYPE1' THEN sum(bill_amt)
ELSE bill_amt
END bill_amt
FROM (
SELECT
price_type,
bill_amt
FROM price_val_tbl
)
GROUP BY price_type, bill_amt
预期输出。
PRICE_TYPE BILL_AMT
========== ========
TYPE1 50
TYPE2 100
TYPE2 200
实际输出
PRICE_TYPE BILL_AMT
========== ========
TYPE1 100
TYPE1 -50
TYPE2 100
TYPE2 200
谢谢,注意安全
答案
在这种情况下,你想 UNION ALL
:
SELECT price_type, SUM(bill_amt)
FROM price_val_tbl
WHERE trim(price_type) = 'TYPE1'
GROUP BY price_type
UNION ALL
SELECT price_type, bill_amt
FROM price_val_tbl
WHERE trim(price_type) <> 'TYPE1';
你需要的理由 UNION ALL
是因为你在每一行都没有唯一的标识符。 你 可以 使用这样的子查询和聚合。
SELECT MIN(price_type) as price_type,
SUM(bill_amt) as billL_amt
FROM (SELECT pv.*, rownum as rn
FROM price_val_tbl pv
) pv
GROUP BY (CASE WHEN trim(price_type) = 'TYPE1' THEN -1 ELSE rn END) ;
然而,这是不太清楚它在做什么。
另一答案
你也可以使用条件式 GROUP BY
以下是:
SQL> SELECT A, SUM(B)
2 FROM YOUR_DATA
3 GROUP BY A, ( CASE WHEN A = 'T1' THEN A ELSE TO_CHAR(ROWNUM) END);
A SUM(B)
-- ----------
T2 100
T2 200
T1 50
SQL>
以上是关于在Oracle SQL中,只对特定条件下的字段进行求和。的主要内容,如果未能解决你的问题,请参考以下文章
oracle语句,我想查询A表中的a字段下的值不等于B表中b的值的数据,
如何在 Oracle SQL 上进行查询以获取时间间隔,按特定字段分组