Как выбрать из таблицы с дополнительным предложением where в одном столбце - PullRequest
2 голосов
/ 10 апреля 2020

У меня проблемы с формулировкой запроса SQL в Oracle. Вот мой пример таблицы:

+----+-----------+-----------+--------+
| id | start     | end       | number |
+----+-----------+-----------+--------+
| 1  | 21-dec-19 | 03-jan-20 | 12     |
| 2  | 23-dec-19 | 05-jan-20 | 10     |
| 3  | 02-jan-20 | 15-jan-20 | 9      |
| 4  | 09-jan-20 | NULL      | 11     |
+----+-----------+-----------+--------+

И вот что у меня есть:

SELECT
    SUM(number) AS total_number,
    SUM(number) AS total_ended_number -- (WHERE end IS NOT NULL)
FROM table
WHERE ... -- a lot of where clauses

И желаемый результат:

+--------------+--------------------+
| total_number | total_ended_number |
+--------------+--------------------+
| 42           | 31                 |
+--------------+--------------------+

Я понимаю, что мог бы сделать отдельный выбор внутри 'total_ended_number', но у исходного выбора уже есть куча предложений where, которые также необходимо применить к внутреннему выбору.

Я могу сформулировать это в 2 отдельных выбора или 2 вложенных выбора с дублированием всех предложений where, но моя цель - не дублировать предложения where, которые будут использоваться в таблице.

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Вы можете sum над выражением case с этим логом c:

SELECT
    SUM(number) AS total_number,
    SUM(CASE WHEN end IS NOT NULL THEN number END) AS total_ended_number
FROM table
WHERE ... -- a lot of where clauses
0 голосов
/ 10 апреля 2020
SUM(case when "end" is not null then number else 0 end) AS total_ended_number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...