PDA

View Full Version : حذف رکوردهای تکراری درون یک تیبیل



mohsen_iceman2000
سه شنبه 19 شهریور 1392, 09:34 صبح
حذف رکوردهای تکراری درون یک تیبیل که یکی از آیتم ها رو حذف نکنه

N_D
سه شنبه 19 شهریور 1392, 10:14 صبح
Create table #Temp (Id int, F1 Nvarchar(10));
Insert #temp values(1,'AAA'),(1,'AAA'),(2,'BBB'),(2,'BBB'),(2,' BBB'),(3,'CCC'),(4,'DDD'),(4,'DDD'),(5,'EEE'),(5,' EEE'),(5,'EEE'),(5,'EEE');

;WITH CTE(RW,id,F1) As
(Select Row_Number() OVER(Partition by Id Order by (Select NULL) ),id,F1 FROM #Temp)
Delete CTE
Where RW <>1;

Select * from #temp;

Drop table #temp

mohsen_iceman2000
سه شنبه 19 شهریور 1392, 10:42 صبح
من نمونه کدی که می نویسم برای سلکت کردن اینه می شه طبق این برایم بنویسید
واقعا ممنون
SELECT Nasher, Onvan, Nevisandeh, COUNT(Onvan) AS [Number of Book]
FROM res_tblbook
GROUP BY Onvan, Nevisandeh, Nasher
HAVING (COUNT(*) > 1) AND (NOT (Nevisandeh IS NULL))
ORDER BY [Number of Book] DESC

N_D
سه شنبه 19 شهریور 1392, 11:12 صبح
اگر درست فهمیده باشم باید بر اساس فیلد های Nasher, Onvan, Nevisandeh اگر تکراری وجود داشت ، فقط ردیف اول حفظ شود و مابقی بعنوان اضافات پاک شوند.
در این صورت کد شما معادل زیر است:


;WITH CTE(RW,Nasher, Onvan, Nevisandeh) As
(Select Row_Number() OVER(Partition by Nasher, Onvan, Nevisandeh Order by (Select NULL) ),Nasher, Onvan, Nevisandeh FROM res_tblbook)
Delete CTE
Where RW <>1;

صباح فتحی
سه شنبه 19 شهریور 1392, 11:50 صبح
سلام راه بهتر اینه توی کوبری عبارت distinicروجلوی selectبنویسید

in_chand_nafar
سه شنبه 19 شهریور 1392, 14:07 عصر
سلام مي توانيد به لينك هاي زير سري بزنيد

حذف رکوردی تکراری از یک جدول - قسمت اول (http://www.nikamooz.com/%D9%85%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86/sql-server-vs-net/sql-server-design/63-%D8%AD%D8%B0%D9%81-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF%DB%8C-%D8%AA%DA%A9%D8%B1%D8%A7%D8%B1%DB%8C-%D8%A7%D8%B2-%DB%8C%DA%A9-%D8%AC%D8%AF%D9%88%D9%84.html)

حذف رکوردی تکراری از یک جدول - قسمت دوم (http://www.nikamooz.com/%D9%85%D9%82%D8%A7%D9%84%D8%A7%D8%AA-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86/sql-server-vs-net/sql-server-design/70-%D8%AD%D8%B0%D9%81-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF%DB%8C-%D8%AA%DA%A9%D8%B1%D8%A7%D8%B1%DB%8C-%D8%A7%D8%B2-%DB%8C%DA%A9-%D8%AC%D8%AF%D9%88%D9%84-%D9%82%D8%B3%D9%85%D8%AA-%D8%AF%D9%88%D9%85.html)

mohsen_iceman2000
سه شنبه 19 شهریور 1392, 15:53 عصر
در دستور زیر چه کاری کنم که نویسنده هایی که Null هستن رو در نظر نگیره

;WITH CTE(RW,Nasher, Onvan, Nevisandeh) As
(Select Row_Number() OVER(Partition by Nasher, Onvan, Nevisandeh Order by (Select NULL) ),Nasher, Onvan, Nevisandeh FROM res_tblbook)
Delete CTE
Where RW <>1;

lastmory
سه شنبه 19 شهریور 1392, 15:59 عصر
در دستور زیر چه کاری کنم که نویسنده هایی که Null هستن رو در نظر نگیره



;WITH CTE(RW,Nasher, Onvan, Nevisandeh) As
(Select Row_Number() OVER(Partition by Nasher, Onvan, Nevisandeh Order by (Select NULL) ),Nasher, Onvan, Nevisandeh FROM res_tblbook where IsNull(Nevisandeh , '') ! = '')
Delete CTE
Where RW <>1;