Można to zrobić łatwo z INSERT
że SELECT
s od CTE
gdzie używasz ROW_NUMBER()
, jak:
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
WYJŚCIE:
YourColumn
----------
book
like
new
pen
(4 row(s) affected)
Można to zrobić łatwo z DELETE
na CTE
gdzie można wykorzystać ROW_NUMBER()
, jak:
--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
WYJŚCIE:
YourColumn
----------
new
pen
book
like
(4 row(s) affected)
Użyłeś znacznika "C#" dla tego pytania, ponieważ ...? A co próbowaliście do tej pory? Przeczytaj [FAQ] i [pytaj] –
Skąd się wzięły "nowe" i "jak" w "tabeli"? – HABO
To pytanie nie jest duplikatem połączonego pytania, ponieważ. w przeciwieństwie do połączonego pytania ta tabela nie ma klucza głównego (który neguje większość rozwiązań w połączonym pytaniu), oraz b. przenosi dane do innej tabeli. – user281806