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)
有人对此有任何想法吗?
标准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)