AT_DevicesというSQLテーブルがあり、各レコードがハードウェアの一部を表しているとします。ハードウェアの一部で発生する「イベント」を説明するAT_Event_Historyという2番目のテーブルがあります。イベントは、機器の紛失、破壊、廃棄などで構成されます。各イベントには、対応するステータスコードがあります。
AT_Devicesの各レコードの最新のイベントのコードを返すSQLを作成しました。デバイスにイベントが記録されていない場合、ステータスコードは0にする必要があるというビジネスルールがあります。
この場合、0を返すようにSQLクエリを作成しましたが、何らかの理由でNULLを返しています。なんで?
SELECT atDeviceHistory.StatusCodeNotNull AS StatusCode0
FROM dbo.AT_Devices atd LEFT OUTER JOIN
(
SELECT DeviceID,
ParentCode,
(CASE WHEN (StatusCode IS NOT NULL) THEN StatusCode ELSE 0 END) AS
StatusCodeNotNull,
WhenEntered AS StatusDate
FROM AT_Event_History as A
WHERE A.ParentCode=0
AND A.WhenEntered >= (SELECT MAX(WhenEntered)
FROM AT_Event_History AS B
WHERE A.DeviceID=B.DeviceID AND ParentCode=0)
) atDeviceHistory ON atd.DeviceID=atDeviceHistory.DeviceID