被這問題困擾許久..
有請各位指點迷津
圖片是我舉的例子...
我想要比對A資料表單筆的「統編」、「發票號碼」、「金額」
是否與B資料表單筆的「統編」、「發票號碼」、「金額」
是否一致,若不同 就篩選出來
我目前的盲點在於
A.A NOT IN B.A
AND
A.B NOT IN B.B
跟
A.A+A.B NOT IN B.A+B.B
(把A跟B資料合併成字串做比對)
是否同義?
或是我的需求有更好的寫法呢?
還請各位前輩指點指點
類似這樣?
<pre class="c" name="code">
select A.*,B.金額 , A.金額 -B.金額 as 差額
from Table_A A
inner join Table_B B on A.統編 = B.統編 and A.發票號碼 = B.發票號碼
where A.金額 -B.金額 <>0
簡單的想法,不一定對:
<pre class="c" name="code">
SELECT A.單別, A.單號, B.統編
FROM A
LEFT JOIN B
ON B.統編=A.統編 AND B.發票=A.發票 AND B.金額=A.金額;
統編欄位是NULL的話,就是不一致。
個人覺得還有一個條件要考慮:
究竟發票資料是幾時寫入 A 資料表? 幾時寫入 B 資料表? 才能確保整個大範圍是合理的.
假如 A 資料表是訂單, 發票資料是批次寫入, 而 B 資料表是發票檔, 開票就立刻寫入, 兩者會有一些落差; 要避免發生這種情況.
再來才是確定: 哪一個檔案是主要關鍵? 也就是發票通常是牽涉到請款, 而訂單是輔助.
並且要設定問題點: 發票跳開可能被視為逃漏稅, 所以不能有發票跳開情況, 那就只能有"1. 未開發票 2. 已開發票並相符", 才用這種條件去思考 SQL 寫法.
try..
<pre class="c" name="code">
select * from [A資料表] as a
where not exists(
select * from [B資料表] as b
where a.統編 = b.統編
and a.發票號碼 = b.發票號碼
and a.金額 = b.金額
)
這是你要的?
select A.單別,A.單號 from A,B where A.發票號碼=B.發票號碼 and (A.統編!=B.統編 or A.金額!=B.金額)
感覺至少得都有發票號碼才得去進行判斷..而亦是裡面唯一獨立的
統編和金額都有可能重覆....至於發票號碼重覆..好吧我沒思考過...