选择2列中具有重复值的行

Sae*_*eid 2 sql t-sql sql-server-2008

这是我的表:

CREATE TABLE [Test].[dbo].[MyTest]
(
[Id]    BIGINT NOT NULL,
[FId]   BIGINT NOT NULL,
[SId]   BIGINT NOT NULL
);
Run Code Online (Sandbox Code Playgroud)

还有一些数据:

INSERT INTO  [Test].[dbo].[MyTest] ([Id], [FId], [SId]) VALUES (1, 100, 11); 
INSERT INTO  [Test].[dbo].[MyTest] ([Id], [FId], [SId]) VALUES (2, 200, 12); 
INSERT INTO  [Test].[dbo].[MyTest] ([Id], [FId], [SId]) VALUES (3, 100, 21); 
INSERT INTO  [Test].[dbo].[MyTest] ([Id], [FId], [SId]) VALUES (4, 200, 22);
INSERT INTO  [Test].[dbo].[MyTest] ([Id], [FId], [SId]) VALUES (5, 300, 13); 
INSERT INTO  [Test].[dbo].[MyTest] ([Id], [FId], [SId]) VALUES (6, 200, 12); 
Run Code Online (Sandbox Code Playgroud)

所以我需要2个选择查询,

首先选择FId,SId,它们在两列中都是不同的,因此结果如下:

100, 11
200, 12
100, 21
200, 22
300, 13
Run Code Online (Sandbox Code Playgroud)

当你看到200, 12返回一次的值.

第二个查询是那些在FId,SId中重复的列的Id,结果是:

2
6
Run Code Online (Sandbox Code Playgroud)

有人对此有任何想法吗?

gbn*_*gbn 9

标准SQL

SELECT
    M.ID
FROM
    ( -- note all duplicate FID, SID pairs
    SELECT FID, SID
    FROM MyTable
    GROUP BY FID, SID
    HAVING COUNT(*) > 1
    ) T
    JOIN -- back onto main table using these duplicate FID, SID pairs
    MyTable M ON T.FID = M.FID AND T.SID = M.SID
Run Code Online (Sandbox Code Playgroud)

使用窗口:

SELECT 
    T.ID
FROM
    (
    SELECT
        ID,
        COUNT(*) OVER (PARTITION BY FID, SID) AS CountPerPair
    FROM
        MyTable
    ) T
WHERE
   T.CountPerPair > 1
Run Code Online (Sandbox Code Playgroud)