我有一個名爲table1
的表具有重複值。它看起來像這樣:如何從SQL Server中的表中刪除重複的行
new
pen
book
pen
like
book
book
pen
但我想從該表中刪除重複的行並將其插入到被稱爲table2
另一個表。
table2
應該是這樣的:
new
pen
book
like
我怎樣才能做到這一點在SQL Server?
我有一個名爲table1
的表具有重複值。它看起來像這樣:如何從SQL Server中的表中刪除重複的行
new
pen
book
pen
like
book
book
pen
但我想從該表中刪除重複的行並將其插入到被稱爲table2
另一個表。
table2
應該是這樣的:
new
pen
book
like
我怎樣才能做到這一點在SQL Server?
假設領域被評爲name
:
INSERT INTO table2 (name)
SELECT name FROM table1 GROUP BY name
該查詢會得到大家的唯一名稱。
你甚至可以把它們放在一個表變量,如果你想:
DECLARE @Table2 TABLE (name VARCHAR(50))
INSERT INTO @Table2 (name)
SELECT name FROM table1 GROUP BY name
或者你可以使用一個臨時表:
CREATE TABLE #Table2 (name VARCHAR(50))
INSERT INTO @Table2 (name)
SELECT name FROM table1 GROUP BY name
您可以用INSERT
是SELECT
就做這個很容易從CTE
您使用ROW_NUMBER()
,如:
DECLARE @YourTable table (YourColumn varchar(10))
DECLARE @YourTable2 table (YourColumn varchar(10))
INSERT INTO @YourTable VALUES ('new')
INSERT INTO @YourTable VALUES ('pen')
INSERT INTO @YourTable VALUES ('book')
INSERT INTO @YourTable VALUES ('pen')
INSERT INTO @YourTable VALUES ('like')
INSERT INTO @YourTable VALUES ('book')
INSERT INTO @YourTable VALUES ('book')
INSERT INTO @YourTable VALUES ('pen')
;WITH OrderedResults AS
(
SELECT
YourColumn, ROW_NUMBER() OVER (PARTITION BY YourColumn ORDER BY YourColumn) AS RowNumber
FROM @YourTable
)
INSERT INTO @YourTable2
(YourColumn)
SELECT YourColumn FROM OrderedResults
WHERE RowNumber=1
SELECT * FROM @ YourTable2
OUTPUT:
--this will just remove them from your original table
DECLARE @YourTable table (YourColumn varchar(10))
INSERT INTO @YourTable VALUES ('new')
INSERT INTO @YourTable VALUES ('pen')
INSERT INTO @YourTable VALUES ('book')
INSERT INTO @YourTable VALUES ('pen')
INSERT INTO @YourTable VALUES ('like')
INSERT INTO @YourTable VALUES ('book')
INSERT INTO @YourTable VALUES ('book')
INSERT INTO @YourTable VALUES ('pen')
;WITH OrderedResults AS
(
SELECT
YourColumn, ROW_NUMBER() OVER (PARTITION BY YourColumn ORDER BY YourColumn) AS RowNumber
FROM @YourTable
)
DELETE OrderedResults
WHERE RowNumber!=1
SELECT * FROM @YourTable
OUTPUT:
YourColumn
----------
book
like
new
pen
(4 row(s) affected)
您可以在CTE
在您使用ROW_NUMBER()
,就像一個DELETE
做到這一點很容易
YourColumn
----------
new
pen
book
like
(4 row(s) affected)
我發佈了一些事情g幾個星期前通過使用DELETE TOP X來刪除重複項。顯然,僅對於一組重複項。然而在評論中,我被Joshua Patchak給了這個小小的寶石。
;WITH cte(rowNumber) AS
(SELECT ROW_NUMBER() OVER (PARTITION BY [List of Natural Key Fields]
ORDER BY [List of Order By Fields])
FROM dbo.TableName)
DELETE FROM cte WHERE rowNumber>1
這將擺脫表中的所有重複項。
如果你想閱讀討論,這裏是原文。 Duplicate rows in a table.
您對此問題使用了'c#'標籤,因爲..?你到目前爲止嘗試過什麼?閱讀[FAQ]和[問] – 2013-02-27 18:50:51
'new'和'like'在'table'中被複制到哪裏? – HABO 2013-02-27 19:46:57
這個問題不是鏈接問題的重複,因爲a。與鏈接問題不同,此表沒有主鍵(這會否定鏈接問題中的大多數解決方案),以及b。它正在將數據傳輸到另一個表。 – user281806 2013-10-12 00:46:03