1

削除する特定のドキュメントエントリ番号を抽出できるクエリを実行する必要があります。(SQL Server 2008)最初のクエリは、テーブルOINVからの結果を提供します。

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

テーブルからの2番目ORIN

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

ORINサンプル結果

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にプッシュするPOSソフトウェアから発生しました。請求書を無効にするためにクレジットノートを作成することによって状況を修正することを目的としたプログラムはうまく機能せず、最初から請求書よりも多くのクレジットノートを作成することがありました。(請求書は合計で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テーブルの2つのコメントが同じである場合は、重複エラーがあることを意味します。ORINテーブルのJrnlMemoフィールドには、OINV請求書番号が格納されます。請求書の繰り返しについてはありません。k、取り消すクレジットノートの正しい数はk-1である必要があります。

4

1 に答える 1

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
于 2012-11-12T13:02:27.747 に答える