Sql server 2008 SQL Server:在case语句中使用可能为NULL的元素
好的,我有一个关于在case语句中使用可能为null的列的问题 同样,我有两个表,第一个看起来像这样的Sql server 2008 SQL Server:在case语句中使用可能为NULL的元素,sql-server-2008,Sql Server 2008,好的,我有一个关于在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
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
更新ua
设置ua.TimeStatusId=CASE
当ua.Time>=us.Schedule\u开始时
ua.Time=DATEADD(小时,-1,美国计划开始)
ua.Time=us.Schedule\u Stop
和ua.Time=
您可以使用IsNull()
函数来解决您的问题发布第二个表的定义。或者如果可能需要处理多个值,则使用COALESCE()。