• 0
imadouzoun

كيف يمكن حذف سجلات متكررة و إبقاء أحدها فقط .. السجلات تحقق شرط معين ..

سؤال

السلام عليكم ورحمة الله وبركاته :

إخواني أحببت أن أطرح تساؤلاً لتنشيط الأدمغة و العقول و لنتخلص قليلاً من الروتين و الأسئلة المتكررة .... :lol:

إيه رأيكم ؟؟

لنبدأ بهذا السؤال !

كيف يمكن أن نحذف جميع السجلات المتكررة التي تحمل شرط ما من جدول ما .. وإبقاء أحدها فقط ..

علماً أن الجدول لا يملك مفتاحاً أساسياً .. :)

شاركونا بآرئكم يا شباب :D

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

15 إجابة على هذا السؤال .

  • 0

كيف يمكن أن نحذف جميع السجلات المتكررة التي تحمل شرط ما من جدول ما .. وإبقاء أحدها فقط ..

علماً أن الجدول لا يملك مفتاحاً أساسياً .. :)

أنا ما عندي مشكلة أبدا

بس عطيني نوع الشرط

أو عطيني جدول يحتوى على بيانات

سلام

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم و رحمة الله وبركاته :

أهلين أخي Design و مبروك الترقية .. :)

بالنسبة للجدول ليكن على النحو التالي :

Use Tempdb
Go
Create Table Student_TB(name Nvarchar(50))

Go

Insert Student_TB Values('محمد')
Insert Student_TB Values('سمير')
Insert Student_TB Values('سمير')
Insert Student_TB Values('سمير')
Insert Student_TB Values('سمير')
Insert Student_TB Values('خالد')

Go

المطلوب حذف تكرارات الإسم سمير .. ;) بحيث يبقى اسم سمير في سجل واحد ..

بدنا نشوف بالأخير الطريقة الأفضل .. شو رأيك أخ Design ... :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ما بعرف أي ترقية عم تحكي عنها !!!

شو رأيك بهذا الكود

سلام


Go
Create Table Student_TB(name Nvarchar(50))

Go

Insert Student_TB Values('محمد')
Insert Student_TB Values('سمير')
Insert Student_TB Values('سمير')
Insert Student_TB Values('سمير')
Insert Student_TB Values('سمير')
Insert Student_TB Values('خالد')

Go

Create procedure RemoveValue
@Value NVarChar ( 50 )
AS Begin Select * From Student_TB where [name] = @Value
IF @@RowCount = 0
Begin raisError ( '%s was not found' , 16 , 1 , @Value )
Return 0
End

-- I don't why we have to do a select statment again !!!
Select * From Student_TB where [name] = @Value
IF @@RowCount = 1
Begin raisError ( 'There is one record with value %s' , 16 , 1 , @Value )
Return 0
End

-- Delete data
Delete From Student_TB Where [name] = @Value
-- Insert data
Insert Into Student_TB Values ( @Value )

raisError ( 'The process done Sucsessfuly ....' , 16 , 1 )
return 0
End
Go

-- Use the Procedure

Exec RemoveValue 'Desigen'
Go

Exec RemoveValue 'سمير'
Go

-- Be sure
Select * From Student_TB Exec RemoveValue 'سمير'
Go

-- This Code Created by Desien
-- Have Fun
Use Tempdb

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم و رحمة الله وبركاته :

أولاً : أخ Design إنت صرت ( عضو مميز ) هذه هي الترقية التي تحدثت عنها .. :lol:

أما فيما يخص الكود فهي طريقة لا بأس بها ... :P

لا تقليلاً من شأن الكود الجميل اللي كتبته أنت ... لكن الطريقة اللتي أقصدها أجمل نوعاً ما .. :)

شكراً على مشاركتك .. وأتمنى أن تجد الطريقة الأفضل .. وتطرحها لنا ..

أخوك عماد ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ما رأيك بهذا الكود

declare @name varchar(50)
declare c cursor for
select name from Student_TB group by name having count(name) > 1
open c
fetch next from c into @name while @@fetch_status = 0
begin delete from Student_TB where name = @name and ID <>
(Select top 1 ID from Student_TB where name = @name)

fetch next from c into @name end
close c
deallocate c

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

بتوقعك بتقصد

جلب عدد السجلات

بعدين نفتح cursor بعدد السجلات - 1

و تحذف السجلات من تعليمة select يلي بتنئ الـ cursor

سلام

IUnknown الأفكار كثييييييييير متقاربة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جرب السكريبت المرفق

انا باجيب السجلات المكررة واحذفها ماعدا اول واحد

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

عزيزي IUnknown يمكنك ان تستخدم ما يلي أيضا :

select  distinct * into t1 from test
delete from test
insert into test select * from t1

عوضا عن ان تستخدم المؤشرات

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

طريقة جيدة ولكنها لن تنفع اذا كان هناك relation ;)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمة الله وبركاته

declare @sWhere varchar(50)
set @sWhere='سمير'
declare @cnt int
set @cnt =(select count([name]) from Student_TB where [name][email protected])-1
if @cnt<=0 return -- if name not exists or only one name found
set rowcount @cnt
delete from Student_TB where [name][email protected]

تم تعديل بواسطه Mo7eb_Alrasool
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمة الله وبركاته :

في الحقيقة أنا سعيد لأن هكذا طريقة من المشاركات ... جعلت المنتدى أنشط بكثير ...

شكراً لكل من حاول معنا :) ...

ملاحظة : كل الطرق تؤدي إلى المطلوب لا شك في ذلك .. لكن الطريقة الموصى بها من مايكروسوفت هي طريقة الأخ .... محب الرسول ....

أحسنت أخي الكريم .. ;)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

برافووووو و الله

يعني rowCount إذا احتوى على قيمة معينة و عملنا حذف يتم حذف السجلات

بقيمتها

شيئ عظيم تماما

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هذه هي الطريقة التي قصدتها يا أخ Design ;)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

و شكرا لكم اخواني

معلومه عشره علي عشره

و ربنا يوفقنا جمعيا لما فيه الخير

سلام

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الاخوة الزملاء لماذا لايكون حذف السجلات المكررة بدون تحديد اسم معين واللي انا لاحظته تحديد " سمير " والمطلوب كيف احذف سجلات متكررة علي سبيل المثال عندي عدة قوائم نذكر منها شيء بسيط مثل

رقم المشترك

رقم الوحدة

الرمز الفعلي

وقت التسجيل

نوع النشاط

مع العلم يتم سحب Report بشكل يومي ويحذف سجلات معينه ونصادف تكرار سجل معين ونود ان يكون الجدول خالي من التكرار وش رايكم بالسؤال :::

تحياتي

امير الابداع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .