Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UNION или как получить 3 COUNT в 1 запросе / 9 сообщений из 9, страница 1 из 1
11.02.2019, 17:59
    #39772452
BorodaOleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNION или как получить 3 COUNT в 1 запросе
Имеется запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
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).
Что-то не могу допертачить %(
...
Рейтинг: 0 / 0
11.02.2019, 18:01
    #39772454
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNION или как получить 3 COUNT в 1 запросе
используй кассу, Люк!

(use CASE, Luke)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
11.02.2019, 18:03
    #39772456
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNION или как получить 3 COUNT в 1 запросе
BorodaOleg,

CASE тебе в помощь
...
Рейтинг: 0 / 0
11.02.2019, 18:14
    #39772465
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNION или как получить 3 COUNT в 1 запросе
А в догонку ещё добавлю - в таких запросах нельзя просто UNION использовать, иначе потеряешь часть каунтов.
...
Рейтинг: 0 / 0
11.02.2019, 19:32
    #39772497
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNION или как получить 3 COUNT в 1 запросе
Заглядывать под спойлер после самостоятельного решения лабы.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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

...
Рейтинг: 0 / 0
12.02.2019, 09:09
    #39772608
BorodaOleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNION или как получить 3 COUNT в 1 запросе
Спасибо всем за помощь, тоже была мысль case использовать, только вот никак не мог допереть куда сунуть условие и соответственно сами данные для счетчика ))
...
Рейтинг: 0 / 0
12.02.2019, 09:28
    #39772611
BorodaOleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNION или как получить 3 COUNT в 1 запросе
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
...
Рейтинг: 0 / 0
12.02.2019, 09:49
    #39772620
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNION или как получить 3 COUNT в 1 запросе
BorodaOleg,

"Пришлось". Не перенапрягся?
Иван специально убирает некоторые детали, против совсем уж ленивых.
...
Рейтинг: 0 / 0
12.02.2019, 12:56
    #39772759
BorodaOleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNION или как получить 3 COUNT в 1 запросе
:)
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / UNION или как получить 3 COUNT в 1 запросе / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]