2016-04-26 74 views
1

我寫了一個查詢 從表1,其中TABLEID刪除(由具有數TABLEID(*)> 1,從表1組中選擇TABLEID) 但此查詢刪除一個單一查詢所有的數據已經計數大於1我想這會刪除我的數據庫重複條目

有人可以幫助我與刪除重複數據和單一的在線查詢,復位計數爲1

我有表Table1

Tableid Count 

1  10 

2  2 

3  1 

4  NULL 

5  31 

帖子刪除它應該是

Tableid Count 
1  1 

2  1 

3  1 

4  NULL 

5  1 

回答

1

我認爲這是你在找什麼

DECLARE @Table TABLE 
( 
    Name VARCHAR(20), 
    Value INT 
); 

;WITH T AS (
    SELECT CONCAT('a',1) AS Name, 1 AS Value 
    UNION ALL 
    SELECT CONCAT('a',T.Value + 1) AS Name, T.Value + 1 FROM T 
    WHERE T.Value < 5 
) 
INSERT INTO @Table 
SELECT T.Name , 
     T.Value 
FROM T 


INSERT INTO @Table 
     (Name, Value) 
VALUES ('a5', -- Name - varchar(20) 
      5 -- Value - int 
     ),('a5', -- Name - varchar(20) 
      5 -- Value - int 
     ) 

INSERT INTO @Table 
SELECT * FROM @Table 

INSERT INTO @Table 
SELECT * FROM @Table 

SELECT 
    COUNT(*) AS TotalCount 
    , Name 
    , Value 
FROM 
    @Table 
GROUP BY 
    Name , 
    Value 
ORDER BY 
    Name 



DELETE T 
FROM (
    SELECT 
     Name 
     , Value 
     , ROW_NUMBER() OVER(PARTITION BY Name, Value ORDER BY Value) AS RN 
    FROM 
     @Table 
) AS T 
WHERE T.RN > 1 


SELECT * FROM @Table ORDER BY Name, Value 
+0

注意:CONCAT()可能不適用於低於2012的SQL Server版本。 –

0
  1. 排序數據按字母或數字順序。
  2. 檢查當前字段是否等於先前的字段。
  3. 刪除相同。
+0

我能得到它單行查詢 – User008

+0

試試這個:http://stackoverflow.com/questions/3317433/delete-duplicate -records-in-sql-server –

1

要刪除所有重複數據:對可能具有相同數據的列進行分組。

DELETE FROM table 
WHERE id IN (SELECT id FROM table GROUP BY column HAVING COUNT(column) > 1) 

要刪除重複的,並保持它的一個:獲取至少(1)從重複和分組列數據。

DELETE t1 FROM table t1, table t2 
WHERE t1.id <> t2.id AND t1.column = t2.column 

在測試任何東西之前先備份數據。

0

我建議在這裏使用select查詢,而不是delete

select tableId,case when count >1 then (count-(count-1)) 
        else count 
       end as count 
from table 1; 
0

試試這個

DELETE FROM Table1 
     WHERE Tableid IN (SELECT Tableid FROM Table1 GROUP BY Tableid HAVING COUNT(*) > 1) 
+0

它與我發佈的相同查詢有問題。您發佈的查詢中的 – User008

+0

是由「表ID」組成的,您是否注意到了這一點? @RaunakMaskay – JYoThI

0

您還可以設置在哪裏都使該行唯一與該領域的各式獨特的鍵KEYWORD IGNORE。

它將創建一個唯一的密鑰並刪除直接重複。

ALTER IGNORE TABLE mytable 
ADD UNIQUE KEY (Tableid);