2013-10-17 54 views
0

真的難以解決的升級訂單有關的取消,因爲這是我想在SQL做什麼,但我知道應該用另一種語言如PHP來實現。SQL找到所有的訂單,但刪除的那一刻

基本上我有什麼是有順序編號,以及有關政策,產品代碼的數據庫。

對於一些訂單有多個階段,如取消,以及(升級時由原有的政策被取消,那麼升級爲差異由例如)

我想什麼升級要做的,就是運行一個查詢,將排除相關的升級順序(如規定在UP產品代碼)都取消,但保持與細節的變化(產品代碼,也是出於CD)全部取消。

因此,在短期; 查詢將需要查找包括取消在內的所有訂單,但隨後刪除與UP具有相同訂單號的任何取消訂單。

我知道這基本上可以用'foreach'來完成,它找到所有UP產品代碼和相關的訂單號,然後刪除與該訂單號關聯的所有取消訂單 - 但我不知道如何實現這在SQL中沒有臨時創建多個表並在刪除後刪除它們。

表結構是這樣:

| Order Number | Product Code | Transaction Value | 
| 1   | RRCN  | -30   | 
| 1   | RRUP  |  12   | 
| 2   | SMFP  |  30   | 
| 3   | SMCN  | -12   | 
| 3   | SMCD  |  12   | 
| 4   | HUCN  | -30   | 

所以我需要查詢來顯示所有的表,但刪除相關RRUP的RRCN。所以查詢應該查找RRUP,看它是1號命令,然後找到與命令1相關的RRCN,並將結果從結果中刪除 - 請注意,結果不是原始表。

任何想法?非常感激! (我在運行SQL Server 2008)

+0

請出示表結構,preferablly一些假數據和細節預期輸出,刪除等 –

+0

謝謝德州儀器,我已經添加了這些..只是幾個格式問題將嘗試正確的! – DJB

回答

0

這個查詢應該做的工作:

SELECT * FROM Q19427600 
WHERE RIGHT(ProductCode,2) <> 'CN' 
OR (RIGHT(ProductCode,2) = 'CN' AND 
    OrderNumber NOT IN (SELECT OrderNumber FROM Q19427600 WHERE RIGHT(ProductCode,2) = 'UP')); 

返回結果:

OrderNumber ProductCode TransactionValue 
1   RRUP  12 
2   SMFP  30 
3   SMCN  -12 
3   SMCD  12 
4   HUCN  -30 
+0

還沒有測試過,但我很確定這是正確的!非常感謝。作爲我ProductCodes的實際佈局是RRCNLL(這樣兩封信上月底..)我把它改爲RIGHT(產品代碼,4)=「UP__」 - 這是否合理? – DJB

+0

發現,沒有工作..現在更改爲MID(ProductCode,3,2)和工作!非常感謝! – DJB