у меня такая таблица
EmpId No_of_days
1 24
2 28
6 24
7 30
8 10
9 15
когда я пишу оператор выбора
SELECT No_of_days FROM _table WHERE EmpId = 3 or 4 or 5
Я получил пустой набор результатов.
Я хочу, чтобы набор результатов возвращал 0 дней для сотрудников 3, 4 и 5.


использовать coalesce
select coalesce(No_of_days,0)
from _table WHERE EmpId in( 3 , 4 , 5)
Кстати, используйте In вместо or, и если вам нужно вставить этот идентификатор в EmpId 1-й, тогда
Coalesce() будет работать иначе, если в empid нет значений, тогда он не будет работать
это означает, что я сначала знаю пустые идентификаторы? как это будет работать для тысяч записей? 3, 4 и 5 - это только примеры, которых нет в реальном мире.
Вы можете использовать конструкцию values() и делать left join :
select tt.empid, isnull(t.No_of_days, 0)
from ( values (3), (4), (5)
) tt (empid) left join
table t
on t.empid = tt.empid;
РЕДАКТИРОВАТЬ : Если у вас больше идентификатора employees, вам нужно поддерживать одну промежуточную таблицу и делать left join:
select tt.empid,
ISNULL(t.No_of_days, 0)
from table tt left join -- possible employee id table
[_table] t
on t.empid = tt.empid;
это означает, что я сначала знаю пустые идентификаторы? как это будет работать для тысяч записей? 3, 4 и 5 - это только примеры, которых нет в реальном мире.
Предполагая, что у вас есть другая таблица со всеми вашими сотрудниками (если нет, то откуда берутся сотрудники 3, 4 и 5?), вы можете использовать LEFT JOIN в своей примерной таблице (_table):
SELECT e.empid,
ISNULL(t.No_of_days,0)
FROM Employee e --No idea what your employee table is actually called, so guessed.
LEFT JOIN _table t ON e.empid = t.empid;
Это предоставит строки для всех ваших сотрудников. Если бы вы хотели только 3, 4 и 5, вы бы добавили свой WHERE:
WHERE e.empid IN (3,4,5)
Как это будет работать? Если нет строк для
EmpID3, 4 или 5, набор данных все равно не вернет строк. ОП ищет не общий агрегат, а агрегат в каждомempID.