私は試しcase when
てみて、値フィールドnull
に設定します。not null
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|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'