PDA

View Full Version : عدم نمایش رکوردهای مشابه



Mahdi_S_T
جمعه 15 بهمن 1389, 09:42 صبح
من یک جدول دارم و شامل 5 فیلد است که میخوام رکوردهایی که در یک فیلد بنام mobile مشابه هستند ، یکبار بیشتر نشان داده نشود :
میدونم که باید از Distinct استفاده کنم ولی من میخوام همه 5 فیلد نمایش داده بشه ؟
اگه نام 4 فیلد دیگر را به دستور Select اضافه کنم ، فیلدهای مشابه در آنها هم فیلتر میشه.چی دستوری بنویسم که هر پنج فیلد من نمایش داده بشه ولی در فیلد mobile رکوردهای مشابه ، یکی را نشان بده ؟

Mahdi_S_T
یک شنبه 01 اسفند 1389, 12:25 عصر
تعجبه ! این دستور بیجواب مونده ، اونم در انجمن SQl

shadi khanum
دوشنبه 02 اسفند 1389, 00:35 صبح
فک کنم متاسفانه دستور distinct فقط قیلدهایی رو نشوت میده که بر اساسشون distinct شده! منم به این مشکل برخوردم و راه حلی واسش پیدا نکردم و مجبور شدم یه جور دیگه حلش کنم

Mahdi_S_T
دوشنبه 02 اسفند 1389, 09:45 صبح
آره منظور من دقیقا همینه،اگه ممکنه بگید چطوری حلش کردید ؟

Reza_Yarahmadi
دوشنبه 02 اسفند 1389, 11:50 صبح
تنها دلیلی که به تاپیک شما جوابی داده نشده اینه که این موضوع بارها پرسیده شده و راه حلهای مختلفی برای اون ارائه شده.
یک نمونه راه حل: (در صورت جستجو کردن راه حلهای بیشتری پیدا میکنید).

With Temp as (
Select
Row_Number() Over(Order by Mobile) as Id,
*
From TableName
), res as(
Select
Min(Id) as ID
From
Temp
Group By
Mobile
)
Select
t.*
From
Temp t Inner Join res
On
t.Id = res.Id
این دستور از 2005 به بالا جواب میده.

Mahdi_S_T
سه شنبه 03 اسفند 1389, 15:21 عصر
بله جستجو کرده بودم. ولی من دستوارت sql را برای نوشتن یک کوئری در دلفی میخوام و از سرور sql استفاده نمی کنم، آیا راه حلی وجود دارد ؟

Reza_Yarahmadi
سه شنبه 03 اسفند 1389, 15:31 عصر
اجراي دستورات SQL ربطي به احرا در سرور و يا اجرا به وسيله زبانهاي برنمه نويسي نداره ، توي برنامه برنامه هم شما دستورات sql رو به سرور پاس ميديد و سرور اونها رو اجرا ميكنه.
در صورتيكه از SQL Server2005 به بالا استفاده ميكنيد دستوري كه بالا گذاشتم بدون مشكل كار ميكنه. در غير اينصورت ورژن SQL خودتون رو بگيد تا دستورات مربوط به اونو بذارم.

Mahdi_S_T
سه شنبه 03 اسفند 1389, 15:41 عصر
همینطور که گفتم من دستورات sql را میخوام در یک کوئری بنویسم و اطلاعات را از دیتابیس موردنظر دریافت کنم و تا بحال نشنیدم که گفته بشه دستورات sql در کوئری ورژن داره ؟

Reza_Yarahmadi
سه شنبه 03 اسفند 1389, 16:04 عصر
همینطور که گفتم من دستورات sql را میخوام در یک کوئری بنویسم و اطلاعات را از دیتابیس موردنظر دریافت کنمچيزي كه من اون بالا گذاشتم يك كوئري است. درحالت كلي به يك بلاك كد SQL كوئري ،‌ اسكريپت و يا ... گفته ميشه.

تا بحال نشنیدم که گفته بشه دستورات sql در کوئری ورژن داره ؟ دستورات دلفي وابسته به ورژن دلفي نيست؟ SQL يك زبان ارتباط با بانكه كه يك سري استاندارها داره (كه اونم وابسته به ورژن SQL داره) ولي باتوجه به نوع سرور (SQL Server , Access , Oracle) دستورات ديگه اي براي راحتي كاربر اضافه ميشه. فرضا در كد بالا ساخار دسور With از ورژن 2005 به بعد اضافهشده و در صورت استفاد از SQL Server 2000 اين دستور كار نخواهد كرد.

Mahdi_S_T
شنبه 07 اسفند 1389, 07:56 صبح
متاسفانه این کد خطا میده ، همانطور که گفتم من سرور sql ندارم .

Reza_Yarahmadi
شنبه 07 اسفند 1389, 09:19 صبح
متاسفانه این کد خطا میده ، همانطور که گفتم من سرور sql ندارم .
اگر سرور SQL نداريد پس چطور با SQL Server كار ميكنيد؟ مگه ميشه بدون داشتن SQL Server از ديتابيس SQL استفاده كرد؟

Mahdi_S_T
شنبه 07 اسفند 1389, 09:40 صبح
من قبلا گفتم که میخوام اطلاعات را از دیتابیس موردنظرم (غیر از sql ) توسط دستورات sql فراخوانی کنم .

Reza_Yarahmadi
شنبه 07 اسفند 1389, 09:48 صبح
ديتابيس مورد استفاده شما چيه؟ ژرسدن اين سوال براي اينه بدونم چه دستوراتي رو پشتيباني ميكنه و چه دستوراتي رو پشتيباني نميكنه.

Mahdi_S_T
شنبه 07 اسفند 1389, 10:56 صبح
ممنونم از پاسخگویی شما.برنامه من با دو نوع دیتابیس کار میکنه یکی اکسس و دیگری easyTable که عملکری شبیه اکسس داره.

Reza_Yarahmadi
شنبه 07 اسفند 1389, 11:02 صبح
ميشه ساختار يكي از جدولهايي كه ميخوايد اين كار رو انجام بديد اينجا بذاريد؟ نام فيلدها ،‌نوع اونها ، كليد اصلي بودن ،‌يونيك بودن و ....

Mahdi_S_T
شنبه 07 اسفند 1389, 11:55 صبح
نام فیلدها family,name,group,mobile که قراره بر روی فیلد group شرطی اعمال بشه و در نتیجه ای که بدست می آید میخواهیم ارسال پیامک داشته باشیم ولی چون احتمال داره یک شماره موبایل در چند گروه مشترک باشه و برای اینکه پیامک برای یک شماره موبایل چند بار ارسال نشه میخوام رکوردهایی که شماره موبایلشان مشابه است،یکبار نمایش داده بشه. ( نوع همه رشته ای است و کلید اصلی نداریم)

Reza_Yarahmadi
شنبه 07 اسفند 1389, 12:09 عصر
در صورت امكان يك فيلد با نام Id و نوع AutoNumber به جدولتون اضافه كنيد و از دستور زير استفاده كنيد

Select
t.*
From
TableName t Inner Join (Select
Min(Id) as ID
From
TableName
Group By
Mobile) res
On
t.Id = res.Id
شرط مورد نظرتون روهم به آخرش اضافه كنيد.

Mahdi_S_T
جمعه 13 اسفند 1389, 18:36 عصر
دوست عزیز من یک مشکل جدید برام پیش آمده ،در حالت عادی این کد به همراه شرطی که من اضافه میکنم :
ابتدا عمل حذف رکوردهای مشابه انجام میشه و سپس شرط اعمال میشه در صورتیکه من میخوام برعکس باشه یعنی ابتدا شرط اعمال بشه و سپس از میان رکوردهای موجود ، عمل حذف رکوردهای مشابه اعمال بشه ؟