Использование ROLLUP в запросе ... Небольшой вопрос - PullRequest
1 голос
/ 25 декабря 2010

Это "table_one" в базе данных oracle:

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 ]

2 голосов
/ 26 декабря 2010

Есть два способа решения этой проблемы. Во-первых, используйте наборы группировки, чтобы точно определить, какие сводные группы вы хотите создать.

В этом случае вы можете определить для группирования (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 голос
/ 25 декабря 2010

Используйте ваш текущий запрос как подзапрос.Во внешнем запросе используйте предложение WHERE, которое исключает значение NULL в Col1

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...