我的表结构如下
表1
第 1 栏 |
---|
10 |
20 |
20 |
20 |
30 |
30 |
40 |
表2
|Col1|
|:---|
|10 |
|20 |
|30 |
|40 |
我的预期结果如下
预期表
|Col1|Col2 |
|---:|:-----------|
|10 |Matched |
|20 |Matched |
|20 |Not Matched |
|20 |Not Matched |
|30 |Matched |
|30 |Not Matched |
|40 |Matched |
SELECT T1.Col1,
CASE
WHEN T2.Col1 IS NOT NULL THEN 'Matched'
ELSE 'NotMatched'
END AS Col2
FROM Table1 T1
LEFT JOIN Table2 T2 ON T1.Col1 = T2.Col1;
我们可以坚持您的加入方法,但使用
ROW_NUMBER
来跟踪发生的情况:
WITH cte1 AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Col1 ORDER BY Col1) rn
FROM Table1
),
cte2 AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY Col1 ORDER BY Col1) rn
FROM Table2
)
SELECT T1.Col1,
CASE WHEN T2.Col1 IS NOT NULL THEN 'Matched' ELSE 'NotMatched' END AS Col2
FROM cte1 T1
LEFT JOIN cte2 T2
ON T1.Col1 = T2.Col1 AND T1.rn = T2.rn
ORDER BY T1.Col1, T2.Col1 DESC;