在两个有重复的表中获取常用术语的数量

时间:2010-11-30 20:35:09

标签: sql-server tsql sql-server-2008

考虑SQL Server 2008中的以下两个表:

Table1只有一个int字段:Term1

Table2也只有一个int字段:Term2。 (是的,我知道 - 我缺乏想象力。)

假设我在表1中插入以下值:1,2, 5,5, 6,7

我在表2中插入以下值:3,4, 5,5, 8,9

我想运行一个查询,在那里我找到两个表共有的术语,我希望这些配对关闭。因此,当存在重复项时(在这种情况下为5和5),我希望找到的每一对都有一行。换句话说,我希望两对5s返回作为两个共同的术语。

我该怎么做?如果我在Table1和Table2上进行简单的内部联接,我会返回四个对的5个。

编辑:我应该更清楚,我对任何共同的价值感兴趣,而不仅仅是重复。问题是复制品更难处理。

因此,如果我在表1中插入以下值:1,2, 5,5,5,6, 7,8

我在表2中插入以下值:3,4, 5,5,5,6, 9,0

然后我希望将 5,5,5,6 视为常用术语。

1 个答案:

答案 0 :(得分:0)

DECLARE @Table1 TABLE (Term1 int)
INSERT INTO @Table1 VALUES (1),(2),(5),(5),(5),(6),(7),(8)
DECLARE @Table2 TABLE (Term2 int)
INSERT INTO @Table2 VALUES (3),(4),(5),(5),(5),(6),(9),(0)

;WITH T1 AS
(
SELECT Term1, ROW_NUMBER() OVER (PARTITION BY Term1 ORDER BY (SELECT 0)) RN1
FROM @Table1
),
T2 AS
(
SELECT Term2, ROW_NUMBER() OVER (PARTITION BY Term2 ORDER BY (SELECT 0)) RN2
FROM @Table2
)
SELECT T1.Term1
FROM T1 JOIN T2 ON T1.Term1=T2.Term2 AND T1.RN1=T2.RN2

输出

Term1
-----------
5
5
5
6
相关问题