我需要一些幫助才能在 2 張桌子之間進行正確計數。
有 2 個表,每個表上都有重復的欄位。我需要在這兩個表之間過濾相同的注冊表,但必須在兩個表上的每個 ID 只計算一次。
Table 1 Table 2
| ID | MSISDN | DATA | | ID | LINE | BYTES |
---------------------- ----------------------
| 11 | 123 | 12 | | 1 | 123 | 12 |
| 22 | 123 | 12 | | 2 | 123 | 12 |
| 33 | 123 | 12 | | 3 | 456 | 56 |
| 44 | 456 | 56 | | 4 | 456 | 56 |
| 55 | 456 | 56 | | 5 | 456 | 56 |
| 66 | 183 | 15 | | 6 | 141 | 71 |
我正在考慮通過 Distinct ID 進行選擇,但仍然沒有得到正確的結果。
select *
from tbl1 A
inner join tbl2 B
on A.msisdn = B.line and A.data = B.bytes
正確的結果應該只顯示 4 行:
| MSISDN | DATA | ID_A | ID_B |
-------------------------------
| 123 | 12 | 11 | 1 |
| 123 | 12 | 22 | 2 |
| 456 | 56 | 44 | 3 |
| 456 | 56 | 55 | 4 |
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=fb9cec42162a6a3a9bd3e1bea586ce99
uj5u.com熱心網友回復:
看起來你想要一個位置匹配
select A.*, B.*
from (
select tbl1.*, row_number() over(partition by msisdn, data order by id) pos
from tbl1) A
inner join (
select tbl2.*, row_number() over(partition by line, bytes order by id) pos
from tbl2) B
on A.msisdn = B.line and A.data = B.bytes and A.pos = B.pos
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/426874.html
