У меня есть таблица Oracle с данными, которые выглядят так:
ID BATCH STATUS
1 1 0
2 1 0
3 1 1
4 2 0
То есть ID является первичным ключом, для каждого "пакета" будет несколько строк, и каждая строка будет иметь код состояния в столбце STATUS. Есть куча других столбцов, но эти самые важные.
Мне нужно написать запрос, который будет суммировать коды состояния для каждого пакета; есть три возможных значения, которые могут быть в столбце STATUS: 0, 1 и 2, и я хотел бы, чтобы вывод выглядел примерно так:
BATCH STATUS0 STATUS1 STATUS2
1 2 1 0
2 1 0 0
Эти числа будут считаться; для партии 1 есть
- 2 записи, в которых STATUS имеет значение 0
- 1 запись, где STATUS имеет значение 1, и
- нет записей, в которых STATUS имеет значение 0.
Для партии 2 есть
- 1 запись, где для STATUS установлено значение 0, и
- нет записей, в которых STATUS имеет значение 1 или 2.
Есть ли способ сделать это в одном запросе, не переписывая запрос для каждого кода состояния? то есть я могу легко написать такой запрос и запустить его три раза:
SELECT batch, COUNT(status)
FROM table
WHERE status = 0
GROUP BY batch
Я мог бы запустить это, а затем снова запустить, где статус = 1, и снова, где статус = 2, но я надеюсь сделать это в одном запросе.
Если это имеет значение, помимо столбца STATUS есть еще один столбец, который я мог бы суммировать таким же образом — еще одна причина, по которой я не хочу иметь выполнить оператор SELECT после оператора SELECT и объединить все результаты.