2012-03-23 21 views
5

रखने यह मेरी मेज के नाम Result_Simulडुप्लीकेट पंक्तियों को हटा दें और एक पंक्ति

यह मान है

 Pk FkIdResult FkIdSimul 
     1  43   1244 
     2  43   1244 
     3  52   1244 
     4  52   1244 

रखने के लिए कैसे सिर्फ पंक्तियों रखने पी = 1 और पी = 3 और हटाने के पी = 2 और पीके = 4

मेरी मदद करने के लिए धन्यवाद।

इम वास्तव में TSQL में अच्छा नहीं

फ्रैंक

+0

एसक्यूएल-सर्वर का कौन सा संस्करण आप पर हैं? –

+0

एसक्यूएल सर्वर 2008 – FrankSharp

उत्तर

12

आप row_number का उपयोग प्रत्येक एक आरोही संख्या नकल देने के लिए कर सकते हैं, और उसके बाद 2 और अधिक डुप्लिकेट हटाने:

delete tbl 
from (
     select row_number() over (partition by FkIdResult, FkIdSimul 
            order by Pk desc) as rn 
     ,  * 
     from YourTable 
     ) tbl 
where rn > 1 

Working example at SE Data.

+0

'विभाजन द्वारा' के बारे में नहीं पता था, बहुत अच्छा! – mellamokb

+0

+1 - मैं 'क्रॉस लागू 'का उपयोग कर रहा था, लेकिन यह बहुत साफ है। –

-1

mysql में:

create temporary table table2 as (select min(pk) as pk from Table1 group by FkIdResult );  
delete from Table1 where pk not in (select pk from table2) 
संबंधित मुद्दे