在sql查询中将选定的行聚合为总计

时间:2017-05-03 09:31:15

标签: sql oracle

我有一个复杂的查询,提供如下输出。

Name Date       Value1 Value2
D    1493803432  12    14
S    1493803424  20    15
T    1493804556  30    12
Y    1493823445  44    13

我想要的输出是将行添加为两行或更多行的总和,这里我只给出了两行来重现需要

Name Date    Value1   Value2
D    1493803432  12    14
S    1493803432  20    15
T    1493803432  30    12
Y    1493803432  44    13
TY   1493803432  74    25

所以它是两行的总和,其中名称在'T'和'Y'中,并将其添加到与新行相同的输出

1 个答案:

答案 0 :(得分:2)

回答问题的原始版本:

WITH your_complex_query ( Name, "Date", value1, value2 ) AS (
  -- insert your complex query here
)
SELECT LISTAGG( NAME, NULL ) WITHIN GROUP ( ORDER BY NAME ) AS NAME,
       MAX( "Date" ) AS "Date",
       SUM( Value1 ) AS value1,
       SUM( Value2 ) AS value2
FROM   your_complex_query
GROUP BY CASE WHEN name IN ( 'T', 'Y' ) THEN 0 ELSE ROWNUM END;

要回答问题的更新版本:

WITH your_complex_query ( Name, "Date", value1, value2 ) AS (
  -- insert your complex query here
)
SELECT *
FROM   your_complex_query
UNION ALL
SELECT 'TY',
       MAX( "Date" ),
       SUM( Value1 ),
       SUM( Value2 )
FROM   your_complex_query
WHERE  name IN ( 'T', 'Y' );