Member 10626601 Ответов: 2

Как обрабатывать значения NULL в запросе.


Как обрабатывать значения NULL в запросе.


выберите идентификатор пользователя,
случай, когда SignDay = 01, то AttStatus end '01', -- CHECKIN каждый день
случай, когда SignDay = 02, то AttStatus end '02',
случай, когда SignDay = 03, то AttStatus end '03',
случай, когда SignDay = 04, то AttStatus end '04',
случай, когда SignDay = 05, то AttStatus end '05'
от vwAttInOut
где userid=11 и год (signdate)=2015 и месяц (signdate)=08

Что я уже пробовал:

Я попытался использовать CTE, Joins, но все еще не нашел никакого способа справиться с null

Mehdi Gholam

Обрабатывать нуль в чем?

Magic Wonder

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

Maciej Los

Основываясь на приведенном выше фрагменте запроса, мы не можем вам помочь. Мы не можем видеть ваши данные и не можем читать ваши мысли. Пожалуйста, предоставьте примерные данные.

Member 10626601

Выберите t.Идентификатор пользователя,Т.[Дата] SignDate,день(т.[Дата]) SignDay, CONVERT(VARCHAR(5), CHECKINOUT. CHECKTIME, 108) Timein,
КОНВЕРТИРОВАТЬ(ТИП VARCHAR(5),CHECKINOUT.CHECKOUTTIME,108) 'тайм-аут',случае, когда T.Трудодней = 0, то 'ж' еще
Случай, когда t. [дата] = праздник.[Дата] затем "ч" еще
Случае, когда с.LeaveTypeName не является нулем, затем c.LeaveTypeName еще
СЛУЧАЙ, КОГДА CHECKINOUT.CHECKTIME РАВЕН NULL, А CHECKINOUT.CHECKOUTTIME РАВЕН NULL, ТОГДА' A ' ELSE
СЛУЧАЙ, КОГДА CHECKINOUT.CHECKTIME РАВЕН NULL ИЛИ CHECKINOUT.CHECKOUTTIME РАВЕН NULL, ТО'? ' ELSE
СЛУЧАЙ, КОГДА ПРИВЕДЕНИЕ(CHECKINOUT.CHECKTIME как раз) &ЛТ;= функция dateadd(минуту,WorkHour.Латейн, Рабочий День.Время) ЗАТЕМ
Случай, когда CAST (CHECKINOUT.CHECKOUTTIME AS TIME) >= DATEADD(MINUTE, - WorkHour.Ранний Выход, Рабочий День.Ожидания) ТОГДА "П" ЕЩЕ?
Конец конец конец конец конец конец конец конец AttStatus
ОТ
(ВЫБЕРИТЕ ПОЛЬЗОВАТЕЛИ.Идентификатор пользователя,график.[Дата], Расписание.Рабочих дней со сведений о пользователях
Расписание перекрестного соединения) t
Левое соединение CHECKINOUT на T.[Дата] = приведение(CHECKINOUT.CHECKTIME как дата) и Т.ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ = CHECKINOUT.ID пользователя
Левый внешний присоединяется к рабочему часу при выезде.WorkHourID = Рабочий День.WorkHourID
Левое внешнее соединение отдыха на T.[Дата] = Отпуска.[Дата]
OUTER APPLY (выберите LeaveRequest.EmpID,zLeaveType.LeaveTypeName из LeaveRequest INNER JOIN zLeaveType на LeaveRequest.LeaveTypeID = zLeaveType.LeaveTypeID
Где EmpID = t. USERID и t. [Date] между FromDate и ToDate) c
Где года(Т.[Дата])=2015 год и на месяц(т.[Дата])=08, и Т.Идентификатор пользователя=11
Группы по T.Идентификатор пользователя,Т.[Дата],Т.Будни,Праздник.[Дата],Си.LeaveTypeName,CHECKINOUT.CHECKTIME,CHECKINOUT.CHECKOUTTIME,WorkHour.Латейн, Рабочий День.TimeIn, WorkHour.EarlyOut,
Рабочий день.Ожидания
--- Результат запроса-----
Дата ID_ПОЛЬЗОВАТЕЛЯ день AttStatus время тайм-аута
11 2015-08-01 1 07 :47 ноль?
11 2015-08-02 2 NULL NULL A
11 2015-08-03 3 07:44 09:44 ?
11 2015-08-04 4 07:37 17: 37 P
11 2015-08-05 5 07:48 17: 58 P
11 2015-08-06 6 NULL NULL W
11 2015-08-07 7 NULL NULL W
11 2015-08-08 8 07:59 16: 01 P
11 2015-08-09 9 07:59 16: 01 P
11 2015-08-10 10 07:59 16: 23 P
11 2015-08-11 11 07: 04 17:20 Больничный
11 2015-08-12 12 06: 51 18:02 Больничный
11 2015-08-13 13 NULL NULL W
11 2015-08-14 14 NULL NULL W
11 2015-08-15 15 07:59 16: 01 Больничный
11 2015-08-16 16 07: 00 17:44 Больничный
11 2015-08-17 17 07: 11 18:19 Больничный
11 2015-08-18 18 07:08 18: 26 Больничный
11 2015-08-19 19 нулевой нулевой больничный
11 2015-08-20 20 NULL NULL W
11 2015-08-21 21 NULL NULL W
11 2015-08-22 22 06: 29 17:55 Больничный
11 2015-08-23 23 07: 08 17: 47 ч
11 2015-08-24 24 06: 48 17:47 Больничный
11 2015-08-25 25 07: 06 18: 17 Больничный
11 2015-08-26 26 07:12 18: 15 Больничный
11 2015-08-27 27 NULL NULL W
11 2015-08-28 28 NULL NULL W
11 2015-08-29 29 07: 07 17: 48 Больничный
11 2015-08-30 30 07: 05 17: 40 Больничный
11 2015-08-31 31 07: 10 17:43 Больничный


Я хочу преобразовать столбец даты в строки

Member 10626601

Выберите t.Идентификатор пользователя,Т.[Дата] SignDate,день(т.[Дата]) SignDay, CONVERT(VARCHAR(5), CHECKINOUT. CHECKTIME, 108) Timein,
КОНВЕРТИРОВАТЬ(ТИП VARCHAR(5),CHECKINOUT.CHECKOUTTIME,108) 'тайм-аут',случае, когда T.Трудодней = 0, то 'ж' еще
Случай, когда t. [дата] = праздник.[Дата] затем "ч" еще
Случае, когда с.LeaveTypeName не является нулем, затем c.LeaveTypeName еще
СЛУЧАЙ, КОГДА CHECKINOUT.CHECKTIME РАВЕН NULL, А CHECKINOUT.CHECKOUTTIME РАВЕН NULL, ТОГДА' A ' ELSE
СЛУЧАЙ, КОГДА CHECKINOUT.CHECKTIME РАВЕН NULL ИЛИ CHECKINOUT.CHECKOUTTIME РАВЕН NULL, ТО'? ' ELSE
СЛУЧАЙ, КОГДА ПРИВЕДЕНИЕ(CHECKINOUT.CHECKTIME как раз) &ЛТ;= функция dateadd(минуту,WorkHour.Латейн, Рабочий День.Время) ЗАТЕМ
Случай, когда CAST (CHECKINOUT.CHECKOUTTIME AS TIME) >= DATEADD(MINUTE, - WorkHour.Ранний Выход, Рабочий День.Ожидания) ТОГДА "П" ЕЩЕ?
Конец конец конец конец конец конец конец конец AttStatus
ОТ
(ВЫБЕРИТЕ ПОЛЬЗОВАТЕЛИ.Идентификатор пользователя,график.[Дата], Расписание.Рабочих дней со сведений о пользователях
Расписание перекрестного соединения) t
Левое соединение CHECKINOUT на T.[Дата] = приведение(CHECKINOUT.CHECKTIME как дата) и Т.ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ = CHECKINOUT.ID пользователя
Левый внешний присоединяется к рабочему часу при выезде.WorkHourID = Рабочий День.WorkHourID
Левое внешнее соединение отдыха на T.[Дата] = Отпуска.[Дата]
OUTER APPLY (выберите LeaveRequest.EmpID,zLeaveType.LeaveTypeName из LeaveRequest INNER JOIN zLeaveType на LeaveRequest.LeaveTypeID = zLeaveType.LeaveTypeID
Где EmpID = t. USERID и t. [Date] между FromDate и ToDate) c
Где года(Т.[Дата])=2015 год и на месяц(т.[Дата])=08, и Т.Идентификатор пользователя=11
Группы по T.Идентификатор пользователя,Т.[Дата],Т.Будни,Праздник.[Дата],Си.LeaveTypeName,CHECKINOUT.CHECKTIME,CHECKINOUT.CHECKOUTTIME,WorkHour.Латейн, Рабочий День.TimeIn, WorkHour.EarlyOut,
Рабочий день.Ожидания
--- Результат запроса-----
Дата ID_ПОЛЬЗОВАТЕЛЯ день AttStatus время тайм-аута
11 2015-08-01 1 07 :47 ноль?
11 2015-08-02 2 NULL NULL A
11 2015-08-03 3 07:44 09:44 ?
11 2015-08-04 4 07:37 17: 37 P
11 2015-08-05 5 07:48 17: 58 P
11 2015-08-06 6 NULL NULL W
11 2015-08-07 7 NULL NULL W
11 2015-08-08 8 07:59 16: 01 P
11 2015-08-09 9 07:59 16: 01 P
11 2015-08-10 10 07:59 16: 23 P
11 2015-08-11 11 07: 04 17:20 Больничный
11 2015-08-12 12 06: 51 18:02 Больничный
11 2015-08-13 13 NULL NULL W
11 2015-08-14 14 NULL NULL W
11 2015-08-15 15 07:59 16: 01 Больничный
11 2015-08-16 16 07: 00 17:44 Больничный
11 2015-08-17 17 07: 11 18:19 Больничный
11 2015-08-18 18 07:08 18: 26 Больничный
11 2015-08-19 19 нулевой нулевой больничный
11 2015-08-20 20 NULL NULL W
11 2015-08-21 21 NULL NULL W
11 2015-08-22 22 06: 29 17:55 Больничный
11 2015-08-23 23 07: 08 17: 47 ч
11 2015-08-24 24 06: 48 17:47 Больничный
11 2015-08-25 25 07: 06 18: 17 Больничный
11 2015-08-26 26 07:12 18: 15 Больничный
11 2015-08-27 27 NULL NULL W
11 2015-08-28 28 NULL NULL W
11 2015-08-29 29 07: 07 17: 48 Больничный
11 2015-08-30 30 07: 05 17: 40 Больничный
11 2015-08-31 31 07: 10 17:43 Больничный

Теперь я хочу преобразовать столбец даты в строки

Member 10626601

Выберите t.Идентификатор пользователя,Т.[Дата] SignDate,день(т.[Дата]) SignDay, CONVERT(VARCHAR(5), CHECKINOUT. CHECKTIME, 108) Timein,
КОНВЕРТИРОВАТЬ(ТИП VARCHAR(5),CHECKINOUT.CHECKOUTTIME,108) 'тайм-аут',случае, когда T.Трудодней = 0, то 'ж' еще
Случай, когда t. [дата] = праздник.[Дата] затем "ч" еще
Случае, когда с.LeaveTypeName не является нулем, затем c.LeaveTypeName еще
СЛУЧАЙ, КОГДА CHECKINOUT.CHECKTIME РАВЕН NULL, А CHECKINOUT.CHECKOUTTIME РАВЕН NULL, ТОГДА' A ' ELSE
СЛУЧАЙ, КОГДА CHECKINOUT.CHECKTIME РАВЕН NULL ИЛИ CHECKINOUT.CHECKOUTTIME РАВЕН NULL, ТО'? ' ELSE
СЛУЧАЙ, КОГДА ПРИВЕДЕНИЕ(CHECKINOUT.CHECKTIME как раз) &ЛТ;= функция dateadd(минуту,WorkHour.Латейн, Рабочий День.Время) ЗАТЕМ
Случай, когда CAST (CHECKINOUT.CHECKOUTTIME AS TIME) >= DATEADD(MINUTE, - WorkHour.Ранний Выход, Рабочий День.Ожидания) ТОГДА "П" ЕЩЕ?
Конец конец конец конец конец конец конец конец AttStatus
ОТ
(ВЫБЕРИТЕ ПОЛЬЗОВАТЕЛИ.Идентификатор пользователя,график.[Дата], Расписание.Рабочих дней со сведений о пользователях
Расписание перекрестного соединения) t
Левое соединение CHECKINOUT на T.[Дата] = приведение(CHECKINOUT.CHECKTIME как дата) и Т.ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ = CHECKINOUT.ID пользователя
Левый внешний присоединяется к рабочему часу при выезде.WorkHourID = Рабочий День.WorkHourID
Левое внешнее соединение отдыха на T.[Дата] = Отпуска.[Дата]
OUTER APPLY (выберите LeaveRequest.EmpID,zLeaveType.LeaveTypeName из LeaveRequest INNER JOIN zLeaveType на LeaveRequest.LeaveTypeID = zLeaveType.LeaveTypeID
Где EmpID = t. USERID и t. [Date] между FromDate и ToDate) c
Где года(Т.[Дата])=2015 год и на месяц(т.[Дата])=08, и Т.Идентификатор пользователя=11
Группы по T.Идентификатор пользователя,Т.[Дата],Т.Будни,Праздник.[Дата],Си.LeaveTypeName,CHECKINOUT.CHECKTIME,CHECKINOUT.CHECKOUTTIME,WorkHour.Латейн, Рабочий День.TimeIn, WorkHour.EarlyOut,
Рабочий день.Ожидания
--- Результат запроса-----
Дата ID_ПОЛЬЗОВАТЕЛЯ день AttStatus время тайм-аута
11 2015-08-01 1 07 :47 ноль?
11 2015-08-02 2 NULL NULL A
11 2015-08-03 3 07:44 09:44 ?
11 2015-08-04 4 07:37 17: 37 P
11 2015-08-05 5 07:48 17: 58 P
11 2015-08-06 6 NULL NULL W
11 2015-08-07 7 NULL NULL W
11 2015-08-08 8 07:59 16: 01 P
11 2015-08-09 9 07:59 16: 01 P
11 2015-08-10 10 07:59 16: 23 P
11 2015-08-11 11 07: 04 17:20 Больничный
11 2015-08-12 12 06: 51 18:02 Больничный
11 2015-08-13 13 NULL NULL W
11 2015-08-14 14 NULL NULL W
11 2015-08-15 15 07:59 16: 01 Больничный
11 2015-08-16 16 07: 00 17:44 Больничный
11 2015-08-17 17 07: 11 18:19 Больничный
11 2015-08-18 18 07:08 18: 26 Больничный
11 2015-08-19 19 нулевой нулевой больничный
11 2015-08-20 20 NULL NULL W
11 2015-08-21 21 NULL NULL W
11 2015-08-22 22 06: 29 17:55 Больничный
11 2015-08-23 23 07: 08 17: 47 ч
11 2015-08-24 24 06: 48 17:47 Больничный
11 2015-08-25 25 07: 06 18: 17 Больничный
11 2015-08-26 26 07:12 18: 15 Больничный
11 2015-08-27 27 NULL NULL W
11 2015-08-28 28 NULL NULL W
11 2015-08-29 29 07: 07 17: 48 Больничный
11 2015-08-30 30 07: 05 17: 40 Больничный
11 2015-08-31 31 07: 10 17:43 Больничный


Я хочу преобразовать столбец даты в строки

Member 10626601

Выберите t.Идентификатор пользователя,Т.[Дата] SignDate,день(т.[Дата]) SignDay, CONVERT(VARCHAR(5), CHECKINOUT. CHECKTIME, 108) Timein,
КОНВЕРТИРОВАТЬ(ТИП VARCHAR(5),CHECKINOUT.CHECKOUTTIME,108) 'тайм-аут',случае, когда T.Трудодней = 0, то 'ж' еще
Случай, когда t. [дата] = праздник.[Дата] затем "ч" еще
Случае, когда с.LeaveTypeName не является нулем, затем c.LeaveTypeName еще
СЛУЧАЙ, КОГДА CHECKINOUT.CHECKTIME РАВЕН NULL, А CHECKINOUT.CHECKOUTTIME РАВЕН NULL, ТОГДА' A ' ELSE
СЛУЧАЙ, КОГДА CHECKINOUT.CHECKTIME РАВЕН NULL ИЛИ CHECKINOUT.CHECKOUTTIME РАВЕН NULL, ТО'? ' ELSE
СЛУЧАЙ, КОГДА ПРИВЕДЕНИЕ(CHECKINOUT.CHECKTIME как раз) &ЛТ;= функция dateadd(минуту,WorkHour.Латейн, Рабочий День.Время) ЗАТЕМ
Случай, когда CAST (CHECKINOUT.CHECKOUTTIME AS TIME) >= DATEADD(MINUTE, - WorkHour.Ранний Выход, Рабочий День.Ожидания) ТОГДА "П" ЕЩЕ?
Конец конец конец конец конец конец конец конец AttStatus
ОТ
(ВЫБЕРИТЕ ПОЛЬЗОВАТЕЛИ.Идентификатор пользователя,график.[Дата], Расписание.Рабочих дней со сведений о пользователях
Расписание перекрестного соединения) t
Левое соединение CHECKINOUT на T.[Дата] = приведение(CHECKINOUT.CHECKTIME как дата) и Т.ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ = CHECKINOUT.ID пользователя
Левый внешний присоединяется к рабочему часу при выезде.WorkHourID = Рабочий День.WorkHourID
Левое внешнее соединение отдыха на T.[Дата] = Отпуска.[Дата]
OUTER APPLY (выберите LeaveRequest.EmpID,zLeaveType.LeaveTypeName из LeaveRequest INNER JOIN zLeaveType на LeaveRequest.LeaveTypeID = zLeaveType.LeaveTypeID
Где EmpID = t. USERID и t. [Date] между FromDate и ToDate) c
Где года(Т.[Дата])=2015 год и на месяц(т.[Дата])=08, и Т.Идентификатор пользователя=11
Группы по T.Идентификатор пользователя,Т.[Дата],Т.Будни,Праздник.[Дата],Си.LeaveTypeName,CHECKINOUT.CHECKTIME,CHECKINOUT.CHECKOUTTIME,WorkHour.Латейн, Рабочий День.TimeIn, WorkHour.EarlyOut,
Рабочий день.Ожидания
--- Результат запроса-----
Дата ID_ПОЛЬЗОВАТЕЛЯ день AttStatus время тайм-аута
11 2015-08-01 1 07 :47 ноль?
11 2015-08-02 2 NULL NULL A
11 2015-08-03 3 07:44 09:44 ?
11 2015-08-04 4 07:37 17: 37 P
11 2015-08-05 5 07:48 17: 58 P
11 2015-08-06 6 NULL NULL W
11 2015-08-07 7 NULL NULL W
11 2015-08-08 8 07:59 16: 01 P
11 2015-08-09 9 07:59 16: 01 P
11 2015-08-10 10 07:59 16: 23 P
11 2015-08-11 11 07: 04 17:20 Больничный
11 2015-08-12 12 06: 51 18:02 Больничный
11 2015-08-13 13 NULL NULL W
11 2015-08-14 14 NULL NULL W
11 2015-08-15 15 07:59 16: 01 Больничный
11 2015-08-16 16 07: 00 17:44 Больничный
11 2015-08-17 17 07: 11 18:19 Больничный
11 2015-08-18 18 07:08 18: 26 Больничный
11 2015-08-19 19 нулевой нулевой больничный
11 2015-08-20 20 NULL NULL W
11 2015-08-21 21 NULL NULL W
11 2015-08-22 22 06: 29 17:55 Больничный
11 2015-08-23 23 07: 08 17: 47 ч
11 2015-08-24 24 06: 48 17:47 Больничный
11 2015-08-25 25 07: 06 18: 17 Больничный
11 2015-08-26 26 07:12 18: 15 Больничный
11 2015-08-27 27 NULL NULL W
11 2015-08-28 28 NULL NULL W
11 2015-08-29 29 07: 07 17: 48 Больничный
11 2015-08-30 30 07: 05 17: 40 Больничный
11 2015-08-31 31 07: 10 17:43 Больничный


Я хочу преобразовать столбец даты в строки

2 Ответов

Рейтинг:
1

The Praveen Singh

select USERID,
CASE ISNULL(USERID, 'NULLVALUE')
case when SignDay = 01 then AttStatus end '01', -- CHECKIN EACH DAY
case when SignDay = 02 then AttStatus end '02',
case when SignDay = 03 then AttStatus end '03',
case when SignDay = 04 then AttStatus end '04',
case when SignDay = 05 then AttStatus end '05'
when 'NULLVALUE' then 'USERID'
else 'USERID'
end
from vwAttInOut
where userid=11 and year(signdate)=2015 and month(signdate)=08


Надеюсь, это решит вашу проблему.


Рейтинг:
0

lokesh lokesh

Привет,

Ниже решение является полной помощью для вас, любые дальнейшие разъяснения, пожалуйста, ответьте здесь.


select USERID,
 case when SignDay = 01 then AttStatus end '01', -- CHECKIN EACH DAY
 case when SignDay = 02 then AttStatus end '02',
 case when SignDay = 03 then AttStatus end '03',
 case when SignDay = 04 then AttStatus end '04',
 case when SignDay = 05 then AttStatus end '05',
 case when SignDay IS NULL then AttStatus end 'No Day',
 case when SignDay = '' then AttStatus end 'No Day'
 from vwAttInOut
 where userid=11 and year(signdate)=2015 and month(signdate)=08