2

さて、nullの可能性があるcaseステートメントで列を使用することについて質問があります。

ここでも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.

しかし、2番目は次のようになります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.

したがって、これらすべての開始時間と停止時間に関連して、アクションが発生した時期を評価できる必要があります。一部のユーザーは、1日に最大5回の開始/停止時間を設定します。1つしかないものもあります。

このコードは、@ Adam Wenglerによって以前の問題を解決するために私に与えられたものであり、開始時間と停止時間が1つしかない場合にうまく機能します。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
4

1 に答える 1

0

この機能を使用しIsNull()て問題を解決できます

于 2012-10-18T18:45:30.057 に答える