好的,所以我有一个关于在case语句中使用可能为null的列的问题。
我再次有两个表,第一个看起来像UserActivity
:
userID Action Time
1 25 12:00
1 10 12:01
1 12 12:35
1 6 13:54
2 10 6:47
2 42 6:48
3 8 11:54
etc.
但第二个现在看起来像UserSchedule
:
userID startTime1 stopTime1 startTime2 stoptime2 startTime3 stopTime3
1 07:00 09:00 11:00 12:00 14:30 16:30
2 11:00 12:30 14:00 15:30
3 14:00 15:00
etc.
因此,我需要能够评估何时与行动发生的所有开始和停止时间相关。有些用户一天最多有5个开始/停止时间。有些只会有一个。
这个代码是由我来解决@Adam Wengler的早期问题的,如果只有一个开始和停止时间,它的效果很好。我不确定如何包含逻辑来测试5个潜在的开始/停止列中的每一个,如果它们是空的则忽略它们。
UPDATE ua
SET ua.TimeStatusId = CASE
WHEN ua.Time >= us.Schedule_Start
AND ua.Time <= us.Schedule_stop THEN 1
WHEN ua.Time >= DATEADD(HOUR, -1, us.Schedule_Start)
AND ua.Time <= us.ScheduleStart THEN 0
WHEN ua.Time >= us.Schedule_Stop
AND ua.Time =< DATEADD(HOUR, 1, us.Schedule_Stop)
THEN 2
ELSE 3
END
FROM dbo.UserActivity AS ua
INNER JOIN dbo.userSchedule AS us ON ua.UserId = us.UserId
答案 0 :(得分:0)
您可以使用IsNull()
功能解决问题