@vetsmen

Как объеденить 2 sql в 1?

Как объеденить 2 SQL запроса в один?
1) SELECT Cases.*, count(BotItems.id) AS "allcount" FROM Cases LEFT JOIN Items ON Items.caseid = Cases.id LEFT JOIN BotItems ON BotItems.itemid = Items.itemid GROUP BY Cases.id
2) SELECT Cases.*, count(BotItems.id) AS "typecount" FROM Cases LEFT JOIN Items ON Items.caseid = Cases.id AND Items.type = 1 LEFT JOIN BotItems ON BotItems.itemid = Items.itemid GROUP BY Cases.id

В первом запросе я считаю количество записей в определенной таблице
Во втором я делаю то же самое, но добавляю критерий "type", по которому выборка записей ограничивается
В результате мне нужно получить обе переменные с числом записей, как это сделать?
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
denman1985
@denman1985
SQL, Oracle Forms/Reports dbd
SELECT Cases.id, count(BotItems.id) AS "allcount", 
sum(case when (BotItems.itemid = Items.itemid and IFNULL(Items.type, 0) = 1) then 1 else 0 end) as "typecount"
FROM Cases LEFT JOIN Items ON Items.caseid = Cases.id 
LEFT JOIN BotItems ON BotItems.itemid = Items.itemid GROUP BY Cases.id
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@VisualIdeas
SELECT Cases.*, count(BotItems.id) AS "alltypecount" FROM Cases LEFT JOIN Items ON Items.caseid = Cases.id LEFT JOIN BotItems ON BotItems.itemid = Items.itemid GROUP BY Cases.id
UNION
SELECT Cases.*, count(BotItems.id) AS "alltypecount" FROM Cases LEFT JOIN Items ON Items.caseid = Cases.id LEFT JOIN BotItems ON BotItems.itemid = Items.itemid AND Items.type = 1 GROUP BY Cases.id

В результате будет 2 строчки возвращено в столбце с именем alltypecount:
1) всего
2) всего по типу
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы