在查询中使用ROLLUP ...小问题

时间:2010-12-25 17:02:45

标签: sql database oracle

它是oracle数据库中的“table_one”:

COL1 COL2
-----------------
2 4
2 1
13 14
13 15

我有这个问题:

SELECT col1,sum(col2)FROM table_one GROUP BY ROLLUP(col1,col2);

查询执行后我有:

------------
2    1
2    4
2    5
13   14
13   15
13   29
     34 

但我需要另一种方式,比如:

------------
2    1
2    4
2    5
13   14
13   15
13   29

没有所有列的摘要 如何更改我的查询.....?

2 个答案:

答案 0 :(得分:2)

有两种方法可以解决这个问题。第一种是使用分组集来准确定义要创建的摘要组。

在这种情况下,您可以使用以下查询定义分组(col1)和(col1,col2):

select col1, sum(col2) 
from table_one
group by grouping sets ((col1), (col1, col2))

否则,您可以使用以下查询按col1和汇总对col2进行分组:

select col1, sum(col2) 
from table_one
group by col1, rollup(col2)

这两个查询都应该生成您需要的输出。

答案 1 :(得分:1)

将您当前的查询用作子查询。在外部查询中,使用WHERE子句消除Col1中的NULL值

SELECT *
FROM
(
    -- Your Rollup Query goes here.
    SELECT * FROM MyTable
)
WHERE COL1 IS NOT NULL

在注释中提供了一个更好的解决方案,以消除源列中的NULL值

使用GROUPING功能确定它是否是小计。

http://www.remote-dba.net/pl_sql/t_sql_grouping.htm