私はそのようなテーブルを持っています:
ORDER_ID CODE1 CODE2 CODE3 STATUS
1 '001' 'BIGP' NULL 4
2 '002' 'BIGP' NULL 1
3 '001' NULL NULL 6
4 '002' NULL 'L' 1
そしてそのような2番目のテーブル:
ADDRESS_ID ORDER_ID TYPE ADD_DATE CATEGORY
1 1 'K1' '2010-01-01' 'CLIENT'
2 1 'D1' '2010-01-02' 'SYSTEM'
3 2 'D2' '2010-01-02' 'SYSTEM'
4 2 'D2' '2010-02-01' 'CLIENT'
次のようなすべての注文に対して私がしなければならないこと:
- ステータスが(4,6)にない
- code1 = '002'
- (code2=nullおよびcode3=null)または(code2 in('BIGA'、'BIGP')およびcode3 = null)または(code2 =NULLおよびcode3='L')
タイプが「D2」または「K1」の単一のアドレスを選択する必要があります(D2の方が優先度が高いため、1つのK1と2番目のD2に2つのアドレスがある場合は、D2を選択する必要があります)。
タイプD2またはK1のアドレスがない場合は、その順序でカテゴリ「CLIENT」の最も古いアドレスを選択する必要があります。
これは私が作成したものです:
SELECT TOP 1000 o.order_Id
, a.Address_Id
, a.Zip
--, *
FROM orders o
address a
ON a.order_Id = o.order_Id
WHERE
(a.Type='D2' OR a.Type='K1')
AND o.Status NOT IN (4, 6)
AND code1='002'
AND ((code2 IS NULL AND code3 IS NULL) OR (code2 IN ('BIGA', 'BIGP') AND code3 IS NULL) OR (code2 IS NULL AND code3 = 'L'))