2017-02-13 1 views
0

У меня есть диаграмма, в которой я хочу отобразить имя ресурсов и количество запросов, над которыми они работают, для каждого типа состояния. например У Джона Смита 5 - в прогресс, 4 - не началось, 5 - анализ, 0 - на удержании.SQL для возврата нуля для записей не найден

Мой запрос извлекает все записи для Джона Смита, но только показывает записи, которые существуют. Как заставить таблицу результатов показывать ноль для Джона Смита, который находится на удержании?

Результаты, которые я хочу показать, - это 10 сотрудников, каждый из которых показывает все мои статусы, которые доступны (не начаты, в процессе, в режиме удержания, анализа, отсрочки и т. Д.) И нуль, если ни один проект не находится в определенной фазе для этого ресурса.

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

Image

+1

Пожалуйста, помечать СУБД – JohnHC

+0

Какова ваша структура таблицы? – kbball

+0

Измените свой вопрос и покажите запрос, который вы используете в настоящее время, а также образцы данных и желаемые результаты. Тег с базой данных, которую вы используете. –

ответ

0

Используйте левое внешнее соединение и группировать result.You получит Null, если запись не существует против «Джон Смит».

Попробуйте случай, когда нужно преобразовать нуль в ноль.

0

В качестве концепции создайте список всех сотрудников и доступных статусов, а затем левые присоедините данные к этому. Это обеспечит ряд для каждого, даже если он не существует для этого сотрудника.

SQL сервер/оракул

with staff as 
(
select staffname, status 
from (select distinct staffname from table1) 
cross join (select distinct status from table1) 
) 
select staff.*, table1.OtherColumns 
from staff 
left join table1 
    on staff.staffname = table2.staffname 
    and staff.status = table2.status 

MySQL:

select staff.*, table1.OtherColumns 
from 
    (
    select staffname, status 
    from (select distinct staffname from table1) 
    cross join (select distinct status from table1) 
) staff 
left join table1 
    on staff.staffname = table2.staffname 
    and staff.status = table2.status 
Смежные вопросы