需要 SQL 查询来获取匹配和不匹配的记录

问题描述 投票:0回答:1

我的表结构如下

表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;
sql sql-server sql-server-2005
1个回答
0
投票

我们可以坚持您的加入方法,但使用

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;
© www.soinside.com 2019 - 2024. All rights reserved.