Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
 UNION или как получить 3 COUNT в 1 запросе  [new]
BorodaOleg
Member

Откуда:
Сообщений: 26
Имеется запрос:

SELECT QG.NAME, QG.ID, COUNT(L2T.M_SWABOID) as S1
FROM QUERYGROUP QG, QGABONS QGA, L2TAG L2T
WHERE QG.ENABLE = 1
  AND QG.ID = QGA.QGID
  AND QGA.ENABLE = 1
  AND QGA.ABOID = L2T.M_SWABOID
GROUP BY QG.NAME, QG.ID
UNION
SELECT QG.NAME, QG.ID, COUNT(L2T.M_SWABOID) as S2
FROM QUERYGROUP QG, QGABONS QGA, L2TAG L2T
WHERE QG.ENABLE = 1
  AND QG.ID = QGA.QGID
  AND QGA.ENABLE = 1
  AND QGA.ABOID = L2T.M_SWABOID
  AND L2T.QUERYSTATE=0
GROUP BY QG.NAME, QG.ID
UNION
SELECT QG.NAME, QG.ID, COUNT(L2T.M_SWABOID) as S3
FROM QUERYGROUP QG, QGABONS QGA, L2TAG L2T
WHERE QG.ENABLE = 1
  AND QG.ID = QGA.QGID
  AND QGA.ENABLE = 1
  AND QGA.ABOID = L2T.M_SWABOID
  AND L2T.QUERYSTATE=2
GROUP BY QG.NAME, QG.ID


Работает правильно, вот только выдает значения S1, S2 и S3 в одном столбце, а мне нужно чтобы в трех разных.
Различаются только добавлением условия во втором и третьем блоке (AND L2T.QUERYSTATE=0) и (AND L2T.QUERYSTATE=2).
Что-то не могу допертачить %(
11 фев 19, 17:59    [21806739]     Ответить | Цитировать Сообщить модератору
 Re: UNION или как получить 3 COUNT в 1 запросе  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 29835

используй кассу, Люк!

(use CASE, Luke)

Posted via ActualForum NNTP Server 1.5

11 фев 19, 18:01    [21806741]     Ответить | Цитировать Сообщить модератору
 Re: UNION или как получить 3 COUNT в 1 запросе  [new]
Симонов Денис
Member

Откуда: Рязань
Сообщений: 9467
BorodaOleg,

CASE тебе в помощь
11 фев 19, 18:03    [21806743]     Ответить | Цитировать Сообщить модератору
 Re: UNION или как получить 3 COUNT в 1 запросе  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 15317
А в догонку ещё добавлю - в таких запросах нельзя просто UNION использовать, иначе потеряешь часть каунтов.
11 фев 19, 18:14    [21806763]     Ответить | Цитировать Сообщить модератору
 Re: UNION или как получить 3 COUNT в 1 запросе  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8282
Заглядывать под спойлер после самостоятельного решения лабы.
+
SELECT QG.NAME, QG.ID, 
COUNT(L2T.M_SWABOID) as S1,
COUNT(case when L2T.QUERYSTATE=0 then L2T.M_SWABOID) as S2,
COUNT(case when L2T.QUERYSTATE=2 then L2T.M_SWABOID) as S3

FROM QUERYGROUP QG, QGABONS QGA, L2TAG L2T
WHERE QG.ENABLE = 1
  AND QG.ID = QGA.QGID
  AND QGA.ENABLE = 1
  AND QGA.ABOID = L2T.M_SWABOID
GROUP BY QG.NAME, QG.ID
11 фев 19, 19:32    [21806824]     Ответить | Цитировать Сообщить модератору
 Re: UNION или как получить 3 COUNT в 1 запросе  [new]
BorodaOleg
Member

Откуда:
Сообщений: 26
Спасибо всем за помощь, тоже была мысль case использовать, только вот никак не мог допереть куда сунуть условие и соответственно сами данные для счетчика ))
12 фев 19, 09:09    [21807038]     Ответить | Цитировать Сообщить модератору
 Re: UNION или как получить 3 COUNT в 1 запросе  [new]
BorodaOleg
Member

Откуда:
Сообщений: 26
Ivan_Pisarevsky
Заглядывать под спойлер после самостоятельного решения лабы.
COUNT(case when L2T.QUERYSTATE=0 then L2T.M_SWABOID) as S2,
COUNT(case when L2T.QUERYSTATE=2 then L2T.M_SWABOID) as S3
[/src][/spoiler]


Пришлось чуть подправить, не хотела проглатывать

COUNT(case when L2T.QUERYSTATE=0 then L2T.M_SWABOID end) as S2,
COUNT(case when L2T.QUERYSTATE=2 then L2T.M_SWABOID end) as S3
12 фев 19, 09:28    [21807051]     Ответить | Цитировать Сообщить модератору
 Re: UNION или как получить 3 COUNT в 1 запросе  [new]
WildSery
Member

Откуда: да, оттуда.
Сообщений: 15317
BorodaOleg,

"Пришлось". Не перенапрягся?
Иван специально убирает некоторые детали, против совсем уж ленивых.
12 фев 19, 09:49    [21807069]     Ответить | Цитировать Сообщить модератору
 Re: UNION или как получить 3 COUNT в 1 запросе  [new]
BorodaOleg
Member

Откуда:
Сообщений: 26
:)
12 фев 19, 12:56    [21807294]     Ответить | Цитировать Сообщить модератору
Все форумы / Firebird, InterBase Ответить