나는 null
및 not null
을 ErrorCode
필드로 설정하여 시도해 보니 case when
입니다.SQL Server : 쿼리에서 'case'를 어떻게 사용합니까?
예.
EmpNo|ChkDate |ChkIn |ChkOut |ErrorCode
00001|2012-10-01 00:00:00.000|2012-10-01 07:21:00.000|2012-10-01 17:05:00.000|0
00002|2012-10-01 00:00:00.000|2012-10-01 22:17:00.000|2012-10-01 00:00:00.000|6
00003|2012-10-01 00:00:00.000|2012-10-01 00:00:00.000|2012-10-01 19:30:00.000|6
00004|2012-10-01 00:00:00.000|NULL |NULL |7
00005|2012-10-01 00:00:00.000|2012-10-01 07:10:00.000|2012-10-01 12:00:00.000|0
00006|2012-10-01 00:00:00.000|2012-10-01 13:50:00.000|2012-10-01 19:20:00.000|0
는하지만 난 출력 (ErrorCode가)
EmpNo|ChkDate |ChkIn |ChkOut |ErrorCode
00001|2012-10-01 00:00:00.000|2012-10-01 07:21:00.000|2012-10-01 17:05:00.000|0
00002|2012-10-01 00:00:00.000|2012-10-01 22:17:00.000|2012-10-01 00:00:00.000|6
00003|2012-10-01 00:00:00.000|2012-10-01 00:00:00.000|2012-10-01 19:30:00.000|6
00004|2012-10-01 00:00:00.000|NULL |NULL |7
00005|2012-10-01 00:00:00.000|2012-10-01 07:10:00.000|2012-10-01 12:00:00.000|8
00006|2012-10-01 00:00:00.000|2012-10-01 13:50:00.000|2012-10-01 19:20:00.000|8
이 ChkIn의 가치와 ChkOut이 반나절입니다 필요합니다. 나는 값 = 8을 설정할 필요하지만 난 = 0
이 코드 시도 :
SELECT
tf.EmpNo, tf.ChkDate, tf.ChkIn, tf.ChkOut,
CASE
WHEN ChkIn is not null and Convert(nvarchar(10), ChkOut,108) != '00:00:00'
THEN 0
WHEN ChkIn is not null and Convert(nvarchar(10) ,ChkOut,108) = '00:00:00'
THEN 6
WHEN Convert(nvarchar(10),ChkIn,108) = '00:00:00' and ChkOut is not null
THEN 6
WHEN Convert(nvarchar(10),ChkOut,108) <= '12:00:00'
OR Convert(nvarchar(10),ChkOut,108) >= '12:00:01' Then 8
WHEN ChkIn is null and ChkOut is null THEN 7
END as 'ErrorCode'
FROM filesTA tf
WHERE tf.ChkDate = '2012-10-01'
왜 EmpNo 1은 코드 0을 얻지 만 EmpNo 5와 6은 8을 얻습니까? 종일과 반나절을 어떻게 정의하고 있습니까? 경과 시간 계산 없이는 이들을 구별 할 수 없으며 기존 쿼리에서 논리가 무엇인지 알려주지 못합니다. 값 0, 6, 7 및 8을 행에 적용해야하는 경우보다 명확하게 설명하십시오. – ErikE