PDA

View Full Version : سوال: حذف تکراری ها توسط کوئری



salambeshoma
جمعه 26 خرداد 1391, 23:59 عصر
با سلام می خواستم کدی بنویسید که مقادیر تکراری در فیلد kod در کوئری حذف و فقط یکی از رکوردها در جدول اصلی بماند . واقعا ممنون

Abbas Amiri
شنبه 27 خرداد 1391, 00:36 صبح
در Query Design در تب Show/Hide گزینه Total را انتخاب تا کوئری متراکم سازی شود (GROUP BY)

salambeshoma
شنبه 27 خرداد 1391, 01:00 صبح
استاد امیری شما می توانید فیل را اصلاح کنید که تکراری ها را حذف و فقط یک رکورد از آن تکررپاری بماند .

Abbas Amiri
شنبه 27 خرداد 1391, 01:03 صبح
نمونه رو آپلودکنید

salambeshoma
شنبه 27 خرداد 1391, 01:06 صبح
خدمت شما استاد بزرگوار فقط روی فیلد kod این کار را انجام دهید . یا علی

Abbas Amiri
شنبه 27 خرداد 1391, 01:18 صبح
کوئری را درحالت SQL باز کنید و کد زیر را در آنجا کپی کنید: برای بقیه فیلدها میتوانید از First, Last, Min, Max , ... استفاده کنید


SELECT First(Table1.ID) AS FirstOfID, Table1.kod, First(Table1.name) AS FirstOfname
FROM Table1
GROUP BY Table1.kod;

salambeshoma
شنبه 27 خرداد 1391, 01:26 صبح
خیلی شرمنده ام این موقع دارم مزاحم می شم کپی کردم نشد . میشه خودتان اصلاح کنید.

Abbas Amiri
شنبه 27 خرداد 1391, 01:44 صبح
فایل اصلاح شد

salambeshoma
شنبه 27 خرداد 1391, 01:48 صبح
ممنون استاد

hamid-nice
جمعه 17 آبان 1392, 00:18 صبح
با سلام
با این نمونه داده های تکراری پیدا می شوند حالا چگونه آنها را پاک کنیم به طوریکه از هر رکورد تکراری فقط یکی در جدول بماند بماند؟
با تشکر

Abbas Amiri
جمعه 17 آبان 1392, 00:40 صبح
با سلام
با این نمونه داده های تکراری پیدا می شوند حالا چگونه آنها را پاک کنیمبه طوریکه از هر رکورد تکراری فقط یکی در جدول بماند بماند؟
با تشکر

برای عمل یکپارچه باید با کد نویسی باید انجام داد:

Dim s As String, tdf As TableDef
s = "SELECT First(Table1.ID) AS FirstOfID, Table1.kod, First(Table1.name) AS FirstOfname " & _
"FROM Table1 GROUP BY Table1.kod;"

DoCmd.CopyObject , "tempTable", acTable, "Table1"
CurrentDb.Execute "DELETE * FROM tempTable"
CurrentDb.Execute "INSERT INTO tempTable(ID, kod,name) SELECT First(Table1.ID) AS FirstOfID, Table1.kod, First(Table1.name) AS FirstOfname " & _
"FROM Table1 GROUP BY Table1.kod;"
DoCmd.DeleteObject acTable, "Table1"

DoCmd.Rename "Table1", acTable, "tempTable"

Abbas Amiri
جمعه 17 آبان 1392, 01:03 صبح
برای حذف موارد تکراری ، روش دوست مان mazoolagh در تاپیک حذف داده های تکراری یک جدول (http://barnamenevis.org/showthread.php?385648-%D8%AD%D8%B0%D9%81-%D8%AF%D8%A7%D8%AF%D9%87-%D9%87%D8%A7%DB%8C-%D8%AA%DA%A9%D8%B1%D8%A7%D8%B1%DB%8C-%DB%8C%DA%A9-%D8%AC%D8%AF%D9%88%D9%84) بسیار عالی است . افسوس که کمتر نسبت به پاسخگویی اقدام می کنند.

hamid-nice
جمعه 17 آبان 1392, 01:17 صبح
برای عمل یکپارچه باید با کد نویسی باید انجام داد:

Dim s As String, tdf As TableDef
s = "SELECT First(Table1.ID) AS FirstOfID, Table1.kod, First(Table1.name) AS FirstOfname " & _
"FROM Table1 GROUP BY Table1.kod;"

DoCmd.CopyObject , "tempTable", acTable, "Table1"
CurrentDb.Execute "DELETE * FROM tempTable"
CurrentDb.Execute "INSERT INTO tempTable(ID, kod,name) SELECT First(Table1.ID) AS FirstOfID, Table1.kod, First(Table1.name) AS FirstOfname " & _
"FROM Table1 GROUP BY Table1.kod;"
DoCmd.DeleteObject acTable, "Table1"

DoCmd.Rename "Table1", acTable, "tempTable"

با سلام و تشکر
تعداد فیلدها و جداول خیلی زیاد هستند راهی که مجبور به وارد کردن اسامی فیلد ها به صورت دستی نباشد هست ؟
با تشکر

Abbas Amiri
جمعه 17 آبان 1392, 01:21 صبح
با سلام و تشکر
تعداد فیلدها و جداول خیلی زیاد هستند راهی که مجبور به وارد کردن اسامی فیلد ها به صورت دستی نباشد هست ؟
با تشکر

کوئری را بسازید و کدهای آن را کپی کنید. همان کاری که در مثال بالا من کردم . درضمن همانطوری که عرض کردم با روش جناب mazoolagh خیلی راحت به جواب میرسید و احتیاج به درج همه فیلدها هم نیست

hamid-nice
جمعه 17 آبان 1392, 15:38 عصر
فیلدها بیش از 105 تاست و با روش جناب mazoolaghدر نمای sql قبول نمی کنه !

Abbas Amiri
جمعه 17 آبان 1392, 16:25 عصر
فیلدها بیش از 105 تاست و با روش جناب mazoolaghدر نمای sql قبول نمی کنه !
نمونه جدول با تعدادی رکورد که مقادیر تکراری دارند رو آپ کنید . همچنین مصداق تکراری بودن در مورد کدام فیلدها میباشد .

safakia
جمعه 17 آبان 1392, 20:59 عصر
می بخشید اگه می خواهید از اول اجازه ورود مقادیر تکراری ندید می تونید در index گزینه no duplicated رو انتخاب کنید و دیگه اصلا لزومی به برنامه نویسی مجدد نباشه

hamid-nice
شنبه 18 آبان 1392, 01:28 صبح
با سلام دوست گرامی
در برنامه برای وارد کردن و یکی کردن اطلاعات برای به روز رسانی و یکپارچگی اطلاعات جداولی که در طی ماه توسط کاربران مختلف داده می شود استفاده می گردد که اگر فیلد تکراری داشته باشد برنامه باید فیلد ID را از نو شماره گذاری کند لذا در تمام فیلد ها عبارت نکراری می تواند وجود داشته باشد لذا باید تمام فیلد ها را بکار برم اینست که قسمت Sql کوئری ها چنانچه عرض کردم جواب نمی دهد
مخصوصا فیلد Multi-Value برای Attachment ها و فیلدهای yes/No دارم که متاسفانه Append Query ها این فیلد ها را ساپورت نمی کنند
فایل کوچکی را ضمیمه کردم امید وارم راهکاری برای این منظور در آن ارائه فرمایید
باتشکر

Abbas Amiri
یک شنبه 19 آبان 1392, 16:19 عصر
با سلام دوست گرامی
در برنامه برای وارد کردن و یکی کردن اطلاعات برای به روز رسانی و یکپارچگی اطلاعات جداولی که در طی ماه توسط کاربران مختلف داده می شود استفاده می گردد که اگر فیلد تکراری داشته باشد برنامه باید فیلد ID را از نو شماره گذاری کند لذا در تمام فیلد ها عبارت نکراری می تواند وجود داشته باشد لذا باید تمام فیلد ها را بکار برم اینست که قسمت Sql کوئری ها چنانچه عرض کردم جواب نمی دهد
مخصوصا فیلد Multi-Value برای Attachment ها و فیلدهای yes/No دارم که متاسفانه Append Query ها این فیلد ها را ساپورت نمی کنند
فایل کوچکی را ضمیمه کردم امید وارم راهکاری برای این منظور در آن ارائه فرمایید
باتشکر

مورد شما حتی بدون فیلد Attachment هم کمی چالش برانگیز هست . مطمنا امکان پذیر است ولی کار میبرد .

احتمالا دو تاپیک مجزا نیاز است یکی همان تاپیکی که wolfstander در آخرین پست قبل از تاریخ جاری زده بود(در مورد تجمیع رکوردها از دیتابیسهای مختلف در یکی) و یکی هم کپی کردن رکورد با فیلد Attachment از یک جدول به جدول دیگر . اگر این دوتاپیک به جواب رسید باکمی تلاش شما هم به جواب خواهید رسید.

hamid-nice
یک شنبه 19 آبان 1392, 19:16 عصر
مورد شما حتی بدون فیلد Attachment هم کمی چالش برانگیز هست . مطمنا امکان پذیر است ولی کار میبرد .

احتمالا دو تاپیک مجزا نیاز است یکی همان تاپیکی که wolfstander در آخرین پست قبل از تاریخ جاری زده بود(در مورد تجمیع رکوردها از دیتابیسهای مختلف در یکی) و یکی هم کپی کردن رکورد با فیلد Attachment از یک جدول به جدول دیگر . اگر این دوتاپیک به جواب رسید باکمی تلاش شما هم به جواب خواهید رسید.
با سلام
تاپیک ایشان را دیدم که جناب wolfstander ظاهرا با راهکاری که داده اید جواب گرفتند چرا که آن تاپیک متوقف شده چرا که آن راه کار وقتی جواب می دهد که با شعبات یا زیر مجموعه های ثابت خودمان فقط کار کنیم تا به آنها اعلام کنیم کهچگونه کد گذاری کنند و ... ولی وقتی مساله پروژه ای و گسترده باشد و در هر پروژه پیمانکارانی کم و زیاد شوند اگرچه کد بندی شدنی باشد ولی جا انداختن و ... بیشتر چالش برانگیز است لذا شدنی نیست بنابه فرمایشتان دو تاپیک مجزا ی زیر را ایجاد کردم که انشاالله به نتیجه برسد و حضور پر رنگ شما را هم مثل همیشه داشته باشیم چرا که این یک مساله ای است که از عهده هر کس بر نمی آید و توانایی افرادی چون شما را می طلبد
http://barnamenevis.org/showthread.php?427250-%DA%A9%D9%BE%DB%8C-%DA%A9%D8%B1%D8%AF%D9%86-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D8%A8%D8%A7-%D9%81%DB%8C%D9%84%D8%AF-Attachment
http://barnamenevis.org/showthread.php?427267-%D9%85%D8%B4%DA%A9%D9%84-%D8%A8%D8%A7-%D8%AA%D8%B9%D8%AF%D8%A7%D8%AF-%D9%81%DB%8C%D9%84%D8%AF-%D9%87%D8%A7%DB%8C-%D8%B2%DB%8C%D8%A7%D8%AF-%D9%87%D9%86%DA%AF%D8%A7%D9%85-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-Append-Query-.-.-.

با تشکر