複数の結合されたテーブルからデータを選択し、以下に基づいて行を除外する基本クエリを変更しようとしていCASE WHEN
ます。結果セットは次のように返されます。
すべての行が列に 0 を返す場合、
CASE
列に '0' を含む 1 行を返しOVERDUE
ます (「1 行を返す」部分は によって処理されDISTINCT
ます)。いずれかの行が列に対して 1 を返す場合、
CASE
列に '1' を含む 1 行を返しOVERDUE
ます。
ベースは次のとおりです。
SELECT DISTINCT t1.*,
CASE WHEN t3.MTemp > t3.MTempLimit
then 1
when t3.TotHours > t3.THoursLimit
then 1
else 0
end [Overdue]
from table_1 t1
LEFT JOIN table_2 t2 on t1.ResNo = t2.ResNo and t1.PCode = t2.PCode
LEFT JOIN table_3 t3 on t2.RepJobNo = t3.RepJobNo
LEFT JOIN table_4 t4 on t4.TypeID = t2.RepType
WHERE t2.RepStat = 1
IF EXISTS/ELSE
問題は、一時テーブルを使用し、一時テーブルのOVERDUE
列に対してクエリを実行することで、これの実用的なバージョンを既に作成していることです。ただし、このソリューションは使用できない可能性があるとのことです (特定のフロントエンド ソフトウェアを使用する必要があるため)。
一時テーブルの使用を伴わない回避策を実行することは可能ですか? 私は派生テーブルと CTE の両方を使用しようと試みてきましたが、IF/ELSE
それらの後に句を使用できないという事実 (これは私が期待していたものでした) のため、どちらも使用可能なものは何も得られませんでした。
私はまだT-SQLのコツをつかんでいるので、どんな助けでも大歓迎です。