2012-11-09 94 views
1

我需要執行查詢,從而可以提取某些文檔條目號以進行刪除。 (SQL Server 2008) 第一個查詢向我提供表OINV的結果。查詢比較2表結果並篩選出某些記錄

SELECT DocEntry AS "DocEntryINV" , Comments, DocTotal 
FROM OINV WHERE DocDate BETWEEN '10-27-2012' AND '10-29-2012' AND Comments IS NOT NULL 
ORDER BY DocTotal ASC, Comments 

從一個表的第二奧林

SELECT DocEntry AS "DocEntryCN" , Comments, JrnlMemo, DocTotal 
FROM ORIN WHERE DocDate BETWEEN '10-27-2012' AND '10-29-2012' AND Comments IS NOT NULL 
ORDER BY DocTotal ASC, Comments 

OINV樣品導致

DocEntryINV JrnlMemo DocTotal 
1    kaka-19  500 
3    kaka-19  500 
5    kaka-19  500 
6    kaka-19  500 
7    Rob-23   750 
9    Rob-23   750 
10   Alex-09  1000 
11   Olma-08  1150 
12   Paul-17  1250 
13   Paul-17  1250 
16   Paul-17  1250 
17   Rita-99  1300 
19   Rita-99  1300 

奧林樣品導致

DocEntryCN Comments JrnlMemo  DocTotal 
67   reverse  kaka-19  500 
69   reverse  kaka-19  500 
70   reverse  kaka-19  500 
71   reverse  kaka-19  500 
74   reverse  kaka-19  500 
75   reverse  Rob-23  750 
77   reverse  Rob-23  750 
78   reverse  Rob-23  750 
79   reverse  Rob-23  750 
84   reverse  Paul-17  1250 
86   reverse  Paul-17  1250 
87   reverse  Paul-17  1250 

對於表OINV,重複出現的銷售點軟件將重複的發票推送到ERP數據庫表OINV。一個旨在通過創建抵消發票的信用票據來糾正情況的計劃效果不佳,有時創建的信用票據比首先發票更多。 (發票總數爲45,000+)。有時信用票據不是在發票重複所需的地方創建的。

如何使用這兩個表創建一個查詢,我可以將ORIN表上的額外條目(如果它們存在)進行反轉?我需要查詢來返回DocEntryCN號碼 的結果,例如上述場景的以下結果。

DocEntryCN Comments JrnlMemo  DocTotal 
67   reverse  kaka-19  500 
69   reverse  kaka-19  500 
75   reverse  Rob-23  750 
77   reverse  Rob-23  750 
78   reverse  Rob-23  750 
84   reverse  Paul-17  1250 
90   reverse  Rita-99  1300 

NB。註釋存儲唯一的發票號碼。如果OINV表中的任何兩個註釋都相同,則表示存在重複錯誤。 ORIN表中的JrnlMemo字段存儲OINV發票號碼。對於任何發票重複沒有。 k,要倒轉的信用票據的正確數量應該是k - 1.

+0

似乎你缺少3 *麗塔-99S –

+0

@ t-clausen.dk我這樣做,以防萬一原始程序修正沒有產生任何信貸奧林樣本爲Rita-99 –

+0

更正原始重複的註釋是否確定列名在OINV樣本結果中是正確的? –

回答

1

您應該知道Rita的數據不存在於ORIN示例中,因此它不能存在於結果中。我希望這能解決你的問題:

;with a as 
(
select row_number() over(partition by JrnlMemo order by DocEntry) rn, 
count(*) over (partition by JrnlMemo) cnt 
, DocEntry DocEntryCN, Comments, JrnlMemo, DocTotal from @ORIN 
FROM ORIN WHERE DocDate BETWEEN '2012-10-27' AND '2012-10-29' AND Comments IS NOT NULL 
), b as 
(
select JrnlMemo, count(*)-2 count 
from oinv 
WHERE DocDate BETWEEN '2012-10-27' AND '2012-10-29' AND Comments IS NOT NULL 
group by JrnlMemo 
) 
select a.DocEntryCn, a.Comments, a.JrnlMemo, a.DocTotal 
from a join b on a.cnt > a.rn + b.count and a.JrnlMemo = b.JrnlMemo 
order by DocEntryCn 
+0

非常感謝您的幫助。讓我檢查一下。 –

+0

對於成千上萬的條目非常適用。對於重複發票創建的信用票據較少或沒有創建的情況,我將進行修改。 –