СРОЧНО! count, group by и 0

Статус
В этой теме нельзя размещать новые ответы.

Горбушка

Ищу её...
Регистрация
2 Май 2008
Сообщения
3.444
Реакции
2.524
Код:
SELECT
      count([NUMBER]),
      NETWORK_ADDRESS
FROM
      INCIDENTSM1 i1,
      PROBSUMMARYM1 p1
WHERE
      p1.NETWORK_ADDRESS IN ('Ivanov', 'Petrov', 'Sidorov')
      and
      p1.CLOSE_TIME between '12/01/2013' and '01/01/2014'
      and
      (p1.TPS_STATUS = '50' or p1.TPS_STATUS = '60')
      and
      i1.TPS_PROBSUMMARY_ID = p1.NUMBER
GROUP BY
      NETWORK_ADDRESS;
Требуется вывести все строки, а не только те, у которых count возвращает число, т.к. нулевые строки тоже нужны (count = 0, name = имя человека).

Нужно посчитать количество записей для каждого юзверя, получить табличку с нулями в том числе...

Таблиц много - руками нули вставлять не вариант.
 
Использовать LEFT JOIN для связи таблиц
Код:
SELECT
      count([i1.NUMBER]),
      p1.NETWORK_ADDRESS
FROM
      PROBSUMMARYM1 p1
      LEFT JOIN INCIDENTSM1 i1
      ON p1.TPS_PROBSUMMARY_ID = i1.NUMBER
WHERE
      p1.NETWORK_ADDRESS IN ('Ivanov', 'Petrov', 'Sidorov')
      and
      p1.CLOSE_TIME between '12/01/2013' and '01/01/2014'
      and
      (p1.TPS_STATUS = '50' or p1.TPS_STATUS = '60')
GROUP BY
      p1.NETWORK_ADDRESS;
 
Не помогло =(

Вру, часть нулей появилась, но не все...

Код:
SELECT
      count(i1.TPS_PROBSUMMARY_ID),
      p1.NETWORK_ADDRESS
FROM
      PROBSUMMARYM1 p1
      LEFT JOIN INCIDENTSM1 i1
      ON i1.TPS_PROBSUMMARY_ID = p1.NUMBER
WHERE
      p1.NETWORK_ADDRESS IN ('VIKovalev')
      and
      p1.CLOSE_TIME between '01/01/2013' and '01/01/2014'
      and
      (p1.TPS_STATUS = '50' or p1.TPS_STATUS = '60')
GROUP BY
      NETWORK_ADDRESS
ORDER BY
        NETWORK_ADDRESS;
На текущий момент запрос выглядит так... Верю, что туплю... Выводится часть нулей, но не все... ХЗ почему... Возможно по каким-то сотрудникам вообще нет строк - ноль получить всё равно необходимо... Сотрудников более 1000 - руками править не вариант, да и выгрузок больше 20
 
Последнее редактирование модератором:
Вру, часть нулей появилась, но не все...
Я даже полез тестовые таблицы у себя создавать, ибо не поверил что так может быть.

Запрос
Код:
SELECT
      count(i1.TPS_PROBSUMMARY_ID),
      p1.NETWORK_ADDRESS
FROM
      PROBSUMMARYM1 p1
      LEFT JOIN INCIDENTSM1 i1
      ON i1.TPS_PROBSUMMARY_ID = p1.NUMBER
WHERE
      p1.NETWORK_ADDRESS IN ('VIKovalev')
      and
      p1.CLOSE_TIME between '01/01/2013' and '01/01/2014'
      and
      (p1.TPS_STATUS = '50' or p1.TPS_STATUS = '60')
GROUP BY
      NETWORK_ADDRESS
ORDER BY
        NETWORK_ADDRESS;

Должен вывести только одну строку, ибо p1.NETWORK_ADDRESS IN ('VIKovalev')
Нужно проверить условия, возможно из-за них часть выборки пропадает.

Возможно по каким-то сотрудникам вообще нет строк - ноль получить всё равно необходимо...
По каким-то сотрудникам может не быть строк в табличке PROBSUMMARYM1 ?
А откуда их тогда взять? :) База про них не знает. Нужно или внести их всех базу или потом обработать выдачу.
 
Последнее редактирование:
По каким-то сотрудникам может не быть строк в табличке PROBSUMMARYM1 ?
Эм... Ну да, верно... Есть способ обойти без создания новой таблицы?
 
Эм... Ну да, верно... Есть способ обойти без создания новой таблицы?
А можно загрузить недостающих сотрудников в табличку PROBSUMMARYM1 откуда-нибудь?
Или потом, после получения выборки, слить её с полным списком сотрудников.
Вообще, все упирается в наличие где-нибудь полного списка сотрудников.
 
Предикат NOT IN пробовали? Поидее можно сделать выборку всех сотрудников из другой таблицы а потом найти те из них которых нет в PROBSUMMARYM1
 
надо делать запрос к таблице сотрудников, а уже ее соединять с той таблицей, которую вы указали, тогда на каждого сотрудника обязательно придется строка вывода с результатами
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху