[英]How can I group/aggregate values correlated to 2 distinct values as one?
So in the database there is a value in the 'value_type' column that are interchangeable with each other. 因此,在数据库中,“ value_type”列中存在一个可以互换的值。 When I aggregate, I want to be able to sum / aggregate the two values (A AND B) together but not the other(s) (C)? 当我汇总时,我希望能够将两个值(A和B)加总/汇总在一起,但不能对其他值(C)加总/汇总? Some Sample Data is below: 一些样本数据如下:
Value_ID Value_Tx Value_Type
1 5 A
2 2 A
3 7 B
4 5 C
5 3 C
6 1 D
7 7 F
The Result I want: 我想要的结果:
Sum Value_Type
14 A | B
8 C
1 D
7 F
I know that to sum normally I would do: 我知道总的来说,我会这样做:
select sum(value)tx, value_type
from table
group by value_type;
Thanks in advance. 提前致谢。
select sum(value)tx, 'A | B' value_type
from table where value_type in ('A','B')
union all
select sum(value)tx, value_type
from table where value_type not in ('A','B')
group by value_type;
easy way,hope help you : ) 简单的方法,希望对您有所帮助:)
I have only tried my query in MySQL 我只在MySQL中尝试过查询
select sum(value_tx),
case
when value_type IN ('A', 'B') THEN 'A | B'
else value_type
end as valtype
from table
group by valtype
Example of how to set the groups dynamically: 如何动态设置组的示例:
WITH test_data AS
(
SELECT 1 val_id, 5 val_tx, 'A' val_typ FROM dual
UNION ALL
SELECT 2, 2, 'A' FROM dual
UNION ALL
SELECT 3, 7, 'B' FROM dual
UNION ALL
SELECT 4, 5, 'C' FROM dual
UNION ALL
SELECT 5, 3, 'C' FROM dual
UNION ALL
SELECT 6, 1, 'D' FROM dual
UNION ALL
SELECT 7, 7, 'F' FROM dual
)
SELECT break_group, SUM(val_tx) total_tx, value_type FROM
(
SELECT val_id, val_tx, val_typ
, CASE WHEN dense_rnk IN (1, 2) THEN 1 ELSE (dense_rnk-1) END break_group
, CASE WHEN dense_rnk IN (1, 2) THEN 'A|B' ELSE val_typ END value_type
FROM
(
SELECT val_id, val_tx, val_typ
, DENSE_RANK() OVER (ORDER BY val_typ) dense_rnk
FROM test_data
)
)
GROUP BY break_group, value_type
ORDER BY break_group
/
Output: 输出:
BREAK_GROUP TOTAL_TX VALUE_TYPE
-----------------------------------
1 14 A|B
2 8 C
3 1 D
4 7 F
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.