View Full Version : تلفیق رکوردهای مشابه در یک رکورد
javad3151
پنج شنبه 29 آذر 1386, 11:43 صبح
سلام
در یک جدول تعدادی از رکوردها کاملا شبیه هم هستند و فقط ID اونها با هم فرق دارند
بهترین راه برای تلفیق این رکوردها در یک رکورد چیه؟
آیا دستوری برای Merge رکوردها وجود داره؟:لبخندساده:
JAFO_IRAN
پنج شنبه 29 آذر 1386, 13:09 عصر
سلام
منظور از تلفیق چیه؟ در نتیجه ی یک select تلفیق بشن؟ آیا دادهای دارند که حالت تلفیق شونده داشته باشه (مثل مقدار یا تعداد)؟
یا اینکه میخواهی در کل db از هر رکورد تکراری فقط یکی را نگهداری و بقیه را حذف کنی؛ یعنی از دید بقیه جدولها تلفیق بشن؟
ارادت
javad3151
شنبه 01 دی 1386, 07:36 صبح
یا اینکه میخواهی در کل db از هر رکورد تکراری فقط یکی را نگهداری و بقیه را حذف کنی؛ یعنی از دید بقیه جدولها تلفیق بشن؟
دقیقا همینه که گفتید
MShirzadi
شنبه 01 دی 1386, 09:04 صبح
خوب می تونی تمام رکورد ها رو Select کنی البته بغیر از فیلد ID و بعد از اونها Distinct بگیری
یعنی
Select Distinct Name,Family,Sex,Religion From TblA
این دستور تمام رکورد هایی که نام و فامیلی و ... با هم مشابه هست رو حذف میکنه و فقط یه دونه از اونا رو به خروجی می ده
موفق باشی
javad3151
شنبه 01 دی 1386, 11:51 صبح
خوب می تونی تمام رکورد ها رو Select کنی البته بغیر از فیلد ID و بعد از اونها Distinct بگیری
1-من میخوام که رکوردهای اضافی حذف بشند تا حجم دیتابیس هم بالانره
2- در دستور select ی که انجام میدم نیاز به فیلد ID هم دارم که متفاوت با بقیه است
بعنوان مثال در جدول زیر یکی از رکوردهای 1 و 2 باید حذف بشند
ID FirstName LastName
-----------------------------
1 name1 lname1
2 name1 lname2
3 name2 lname3
.
.
.
JAFO_IRAN
شنبه 01 دی 1386, 15:02 عصر
سلام
ببین این به کارت میاد؟
delete tbl_Src
where not (fld_Id in
(select Min(fld_Id), fld_FirstName, fld_LastName
from tbl_Src
group by fld_FirstName, fld_LastName))
البته اگر رکوردهایی که داری حذف میکنی در سایر جداول به عنوان PK بکار رفته باشن، لازمه تا اول اون رکوردها رو اصلاح کنی تا از PKهای درست استفاده کنند (وگرنه delete با خطا مواجه میشه)
ارادت
MShirzadi
شنبه 01 دی 1386, 19:19 عصر
البته دوست عزیز این دستورت یه مشکلی داره درستش هم اینجوریه
delete tbl_Src
where Id Not in
(select Min(Id)as ID
from tbl_Src
group by Name, Family)
البته من هم یه کدی در پست دیگری نوشتم که گفتم بزارم و شاید به دردتون بخوره
Declare @T_ID Table(ID int)
,@T_employee_number Table(ID int)
Declare @id int
Declare C Cursor For Select Distinct employee_number From Tbl_Name
Open C
Fetch C into @id
While(@@Fetch_Status=0)
Begin
insert into @T_employee_number (id)values (@id)
Select @id=MAX(ID) From Tbl_Name Where employee_number = @ID
insert into @T_ID (id)values (@id)
Fetch Next From C into @id
End
Deallocate C
Delete From Tbl_Name Where ID Not in (Select * From @T_ID) And employee_number in (Select * From @T_employee_number)البته فکر کنم روش دوستمون بهتر از روش من باشد
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.