选择重复的记录

时间:2018-07-25 10:30:17

标签: sql-server tsql

我只想检索重复记录而不是唯一记录。 假设我有如下数据

Ids Names 
1  A
2  B
1  A

我想要类似以下的输出:

Sno Id Name 
1  1 A 
2  1 A 

3 个答案:

答案 0 :(得分:1)

尝试一下:

DECLARE @DataSource TABLE
(
    [ID] INT
   ,[name] CHAR(1)
   ,[value] CHAR(2) 
);

INSERT INTO @DataSource ([ID], [name], [value])
VALUES (1, 'A', 'x1')
      ,(2, 'B', 'x2')
      ,(1, 'A', 'x3');

WITH DataSource AS
(
    SELECT *
          ,COUNT(*) OVER (PARTITION BY [ID], [name]) AS [Count]
    FROM @DataSource
)
SELECT *
FROM Datasource
WHERE [Count] > 1;

enter image description here

分组部分在窗口函数的PARTITION BY部分中完成。因此,基本上,我们正在为每个唯一的ID-name对计数记录。当然,您可以在此处添加更多列。

答案 1 :(得分:0)

SELECT Id, Names
FROM T
GROUP  BY Id,Name 
HAVING COUNT(*) >1

答案 2 :(得分:0)

enter image description here像您的请求一样,您需要创建一个新列[SNo],该列在原始列(名称,ID)上进行分区。 [SNo]> 1的重复项。要进行过滤,只需获得RCount> 1。 在下面查看样机:

 DECLARE @Records TABLE (Id int, Names VARCHAR(10))
INSERT INTO @Records
SELECT 1, 'A' UNION ALL
SELECT 2, 'B' UNION ALL
SELECT 1, 'A'



----To Get Duplicates -----

SELECT *
FROM
(
SELECT 
    SNo=ROW_NUMBER()over(PARTITION BY Names,Id order by Id),
    RCount=COUNT(*) OVER (PARTITION BY [ID], Names),
    *
FROM
    @Records
)M
WHERE 
    RCount>1