次のクエリを検討してください。
SELECT dgc.Id, h.[identity], h.associate_number, h.pos_start, h.pos_stop,
ISNULL((
SELECT DATEADD(DAY, -1, ih.pos_start)
FROM #hr_data_dgc ih
WHERE ih.associate_number = h.associate_number AND
ih.Id = (dgc.Id - 1)
), h.pos_stop) AS new_pos_stop
FROM #hr_data h
JOIN #hr_data_dgc dgc ON dgc.[identity] = h.[identity]
フィールドISNULLのサブクエリからの結果に対して利用されているステートメントに特に注意してください。new_pos_stopサブクエリが を返す場合、これは期待どおりに機能しますNULL。
ここで、そのクエリを少し変更すると、次のようになります。
SELECT dgc.Id, h.[identity], h.associate_number, h.pos_start, h.pos_stop,
(
SELECT ISNULL(DATEADD(DAY, -1, ih.pos_start), h.pos_stop)
FROM #hr_data_dgc ih
WHERE ih.associate_number = h.associate_number AND
ih.Id = (dgc.Id - 1)
) AS new_pos_stop
FROM #hr_data h
JOIN #hr_data_dgc dgc ON dgc.[identity] = h.[identity]
サブクエリで値を取得するのではなく、NULLforを返します。new_pos_stoph.pos_stop
これが私が理解していないことです。handの値ih(つまり、選択されている現在の行) をWHERE句では利用できますが、SELECTリストでは利用できませんか?
要するに、リストにはレキシカルスコープがないように見えます (その用語を大まかに使用しています)、私はそれで正しいですか? SELECT言い換えれば、SELECTリストは直接節の要素のみを活用できます。 FROM