我有一個表像這樣:TSQL一個從2條件選擇行
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
和第二表所示:
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'
- (碼2 = null並且CODE3 = NULL)或(在( 'BIGA', 'BIGP' 碼2)和CODE3 = NULL)或(碼2 = NULL和CODE3 = 'L')
我必須選擇一個地址類型爲'D2'或'K1'(D2具有較高的優先級,所以如果有兩個地址一個K1和另一個D2我必須選擇D2)。
如果沒有任何類型爲D2或K1的地址,我必須爲該訂單選擇類別爲「客戶」的最舊地址。
這是我創造:
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'))
我會嘗試第一個解決方案。感謝這麼快的回覆:)哪一個更好/更快? – Misiu 2012-04-18 12:56:14
嘗試兩種。考慮到訂單數量較少,我首先想到的會更好,而第二個訂單的訂單數量會更多,但我必須對其進行測試。 – 2012-04-18 12:58:34
還有一件事。我需要改變這樣的查詢:它必須選擇第一個地址D2,如果不存在,那麼K1(這部分工作),但如果沒有任何D2或K1,我必須爲每個訂單選擇最舊的地址。我編輯了我的問題。 – Misiu 2012-04-18 13:22:01