#sql #sql-server #tsql
#sql #sql-server #tsql
Вопрос:
У меня есть таблица, подобная этой
EmpId No_of_days
1 24
2 28
6 24
7 30
8 10
9 15
когда я пишу оператор select
SELECT No_of_days FROM _table WHERE EmpId = 3 or 4 or 5
Я получил пустой результирующий набор.
Я хочу, чтобы результирующий набор возвращал 0 дней для сотрудников 3, 4 и 5
Ответ №1:
Вы можете использовать values()
construct amp; do 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;
РЕДАКТИРОВАТЬ : Если у вас больше employee
идентификаторов s, вам нужно поддерживать одну промежуточную таблицу и делать 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;
Комментарии:
1. это означает, что я сначала узнаю пустые идентификаторы? как это будет работать для тысяч записей? 3, 4 и 5 — это всего лишь пример, не существующий в реальном мире
Ответ №2:
Предполагая, что у вас есть другая таблица со всеми вашими сотрудниками (если нет, то откуда берутся сотрудники 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)
Ответ №3:
используйте coalesce
select coalesce(No_of_days,0)
from _table WHERE EmpId in( 3 , 4 , 5)
Кстати, используйте In
вместо or
, и если вам нужно ввести эти идентификаторы в EmpId
1-й, тогда
coalesce() будет работать в противном случае, если в empid нет значений, то это не будет работать
Комментарии:
1. Как это будет работать? Если нет строк для
EmpID
3, 4 или 5, набор данных по-прежнему не вернет строк. OP ищет не общую совокупность, а совокупность для каждогоempID
.2. это означает, что я сначала узнаю пустые идентификаторы? как это будет работать для тысяч записей? 3, 4 и 5 — это всего лишь пример, не существующий в реальном мире