2017-07-31 85 views
0

我有表,銷售單據和發票,例如SQL過濾數據

 
SalesDoc | Invoice | InvoiceType 
------------------------------------ 
Doc1  | Inv1 | A 
Doc1  | Inv2 | B 
Doc1  | Inv3 | C 
Doc2  | Inv1 | A 
Doc2  | Inv2 | C 
Doc3  | Inv1 | A 
Doc3  | Inv2 | B 

每個銷售文件可以有多個發票例如,標準發票或形式..

我需要篩選表接收見下表

所以如果銷售文檔存在incoice C,那麼只顯示該行以供銷售DOC, 如果沒有則檢查B型,然後A型

 
SalesDoc | Invoice | InvoiceType 
----------------------------------- 
Doc1  | Inv3 | C 
Doc2  | Inv2 | C 
Doc3  | Inv2 | B 

我知道我可以存儲銷售文檔在臨時表中,然後循環(使用光標)和過濾源表中刪除不必要的記錄 但我想知道,如果是任何其他的解決辦法不是循環來實現它

感謝 託梅克

回答

0

取決於更大的邏輯,你可以用骨料做到這一點:

Select SalesDoc, Max(Invoice) as Invoice, Max(InvoiceType) as InvoiceType 
FROM MYSALESTABLE 
GROUP BY SalesDoc 
+0

謝謝,幾乎不做修改的偉大工程。我真正的發票類型是(從最重要的)5,M,U。所以我最後的查詢看起來像

 SELECT DeliveryNo, max(InvoiceNo), MAX(DocTypeVal) FROM ( Select *, \t CASE \t \t WHEN DocType = 'M' THEN 3 \t \t WHEN DocType = '5' THEN 2 \t \t WHEN DocType = 'U' THEN 1 \t END as DocTypeVal FROM ##temp ) as t GROUP BY DeliveryNo