2013-02-27 192 views
5

में किसी तालिका से डुप्लिकेट पंक्तियों को कैसे निकालें I have table1 नामक एक तालिका है जिसमें डुप्लिकेट मान हैं। यह इस तरह दिखता है:SQL सर्वर

new 
pen 
book 
pen 
like 
book 
book 
pen 

लेकिन मैं उस तालिका से डुप्लिकेट पंक्तियों को हटाने और उन्हें table2 नामक एक और तालिका में सम्मिलित करना चाहते हैं।

table2 इस तरह दिखना चाहिए:

new 
pen 
book 
like 

मैं कैसे एसक्यूएल सर्वर में ऐसा कर सकते हैं?

+0

आपने इस प्रश्न के लिए 'C#' टैग का उपयोग किया क्योंकि ..? और आपने अभी तक क्या प्रयास किया है? पढ़ें [एफएक्यू] और [पूछें] –

+0

'new' और' like' 'table' में डुप्लिकेट कहां से मिले? – HABO

+0

यह प्रश्न लिंक किए गए प्रश्न का डुप्लिकेट नहीं है क्योंकि ए। लिंक किए गए प्रश्न के विपरीत इस तालिका में कोई प्राथमिक कुंजी नहीं है (जो लिंक किए गए प्रश्न में अधिकांश समाधानों को अस्वीकार करती है), और बी। यह डेटा को दूसरी तालिका में स्थानांतरित कर रहा है। – user281806

उत्तर

1

मान लेते क्षेत्र 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 
+0

"उस तालिका से डुप्लीकेट पंक्तियों को हटाएं" – Magnus

+0

मैं उनके साथ टेबल 2 कैसे बना सकता हूं ??? @ माइकल – meo

+0

@ मैग्नस: आप सही हैं। ऐसा लगता है कि वहां के बीच एक संपादन था - मैंने इसे पहले और यहां तक ​​कि दूसरे पढ़ने में नहीं देखा था। –

1

आप एक 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 

चुनें * से @ YourTable2

उत्पादन:

--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 

आउटपुट:

YourColumn 
---------- 
book 
like 
new 
pen 

(4 row(s) affected) 

आप इस आसानी से एक DELETE के साथ एक CTE जहां ROW_NUMBER() उपयोग करते हैं, की तरह पर क्या कर सकते हैं

YourColumn 
---------- 
new 
pen 
book 
like 

(4 row(s) affected) 
1

मैंने कुछ पोस्ट किया डीईएलटीईई टॉप एक्स का उपयोग कर दो हफ्ते पहले डुप्लीकेट हटाने पर जी। केवल डुप्लिकेट के एक सेट के लिए स्पष्ट रूप से। हालांकि टिप्पणियों में मुझे यहोशू पैचक द्वारा यह छोटा गहना दिया गया था।

;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.