Oracle - вернуть несколько подсчетов как один запрос - PullRequest
11 голосов
/ 15 июня 2011

У меня есть пара запросов, подробно описанных ниже. Я хотел бы иметь возможность выполнить один запрос SQL, который возвращает оба значения, это возможно?

1

select nvl(count(rowid), 0) from tablename where OPP = 'FOO' and date = 'BAZ';

2

select nvl(count(rowid), 0) from tablename where OPP = 'BAR' and date = 'BAZ';

Пока я нашел только специфичные для MSSQL решения в своих поисках.

Ответы [ 3 ]

8 голосов
/ 15 июня 2011

Если они вам нужны в одном ряду:

SELECT
    COUNT(CASE OPP WHEN 'FOO' THEN 1 END),
    COUNT(CASE OPP WHEN 'BAR' THEN 1 END)
FROM tablename
WHERE OPP IN ('FOO', 'BAR') AND date = 'BAZ'

(Подход GROUPO от Thilo в любом случае является лучшим общим решением).Я удалил NVL().Я забыл, почему я никогда не использую его.

6 голосов
/ 15 июня 2011

Если условие действительно выглядит так (та же таблица, только одно поле отличается в группах):

select opp, count(*) from tablename
where date = 'BAZ'
group by opp
having opp in ('FOO', 'BAR');

Для произвольных запросов:

select 'A', count(*) from tableA
union all
select 'B', count(*) from tableB
3 голосов
/ 15 июня 2011

Вы можете использовать оператор with:

with
count1 as (
select ...
),
count2 as (
select ...
)
select tot1, tot2
from count1, count2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...