PDA

View Full Version : حرفه ای: محدود کردن سطرهای جدول



airsoft
چهارشنبه 07 مهر 1389, 10:51 صبح
با سلام،
من میخوام سطر هایی رو از جدول نشون بدم و پرینت بگیرم که اون سطر ها در یک فیلد اگه تکراری بود بیاد فیلد دوم رو هم چک کنه اگه اون جا مقدار فیلد به ازاء هر مقدار از فیلد1 تکراری نبود کل سطر نشون داده بشه و اگر نه نشون داده نشه،فایل زیر دقیقا منظورم رو نشون میده:

mahziar
چهارشنبه 07 مهر 1389, 13:02 عصر
با سلام،
من میخوام سطر هایی رو از جدول نشون بدم و پرینت بگیرم که اون سطر ها در یک فیلد اگه تکراری بود بیاد فیلد دوم رو هم چک کنه اگه اون جا مقدار فیلد به ازاء هر مقدار از فیلد1 تکراری نبود کل سطر نشون داده بشه و اگر نه نشون داده نشه،فایل زیر دقیقا منظورم رو نشون میده:


سلام
تو دستور select ی که از جدولتون میگیرین میتونین از کلمه کلیدی distinct استفاده کنین برای حذف تکراری
مثلا :


select distinct * from Tbl1

mahziar
چهارشنبه 07 مهر 1389, 16:16 عصر
ممنون ولی اگه فایل ضمیمه رو باز کنین مشکل به این سادگی حل نمیشه!!!

عزیز اول شما همون داده های خودت رو تو یه جدول وارد کن و اون دستور رو تست کن بعد بگو نمیشه .

من فکر کردم اشتباه میکنم و تست کردم با داده های شما ، دقیقا جواب جدول دوم بود

airsoft
پنج شنبه 08 مهر 1389, 07:00 صبح
عزیز اول شما همون داده های خودت رو تو یه جدول وارد کن و اون دستور رو تست کن بعد بگو نمیشه .

من فکر کردم اشتباه میکنم و تست کردم با داده های شما ، دقیقا جواب جدول دوم بود

دوست عزیزم ممنون،حرف شما درست ولی من توی فیلد 4 هیچ عدد تکراری ندارم،به همین خاطر جواب من غلط در میاد،چطور میتونم فقط رو 2 تا فیلد اول distinct بزنم،توی یه سایت خارجی نوشته بود روی اون دو تا فیلد Group By بزن ولی هرجورنوشتم ایراد گرفت.

Jean Reno
یک شنبه 11 مهر 1389, 06:41 صبح
select FirstCol,SecondCol from MyTable Group By FirstCol,SecondCol

Reza_Yarahmadi
یک شنبه 11 مهر 1389, 09:13 صبح
با دستوري مثل دستور زير ميتونيد اين كار رو انجام بديد. (فكر نميكنم با يك select بشه همچين كاري كرد ولي اگر روشي پيدا كرديد لطفا اينجا بذاريد).

select
tbl.*
,IDENTITY(int,1,1) as Id
into #temp from tbl

;with h1 as (
select
Name
,Family
,Min(Id) as Id
from #temp
group by Name, Family)
,h2 as (
Select
t.Name
,t.Family
,t.Address
,t.Phone
from #temp t inner join h1 on t.Id = h1.Id)

Select * from h2
drop table #temp

Jean Reno
یک شنبه 11 مهر 1389, 09:18 صبح
اما این دستور Select تست کردم جواب داد




SELECT FirstNumber, SecNumber
FROM NumberTable
GROUP BY FirstNumber, SecNumber

Reza_Yarahmadi
یک شنبه 11 مهر 1389, 09:24 صبح
دستور شما فقط 2 فيلد FirstNumber, SecNumber رو برميگردونه در حالي كه دوستمون ميخواد اطلاعات كل سطر برگرده. اگر فقط همين 2 فيلد بود با دستور زير هم ميشد به دستش آورد

Select Distinct FirstNumber, SecNumber From tableName

airsoft
یک شنبه 11 مهر 1389, 11:45 صبح
با دستوري مثل دستور زير ميتونيد اين كار رو انجام بديد. (فكر نميكنم با يك select بشه همچين كاري كرد ولي اگر روشي پيدا كرديد لطفا اينجا بذاريد).

select
tbl.*
,IDENTITY(int,1,1) as Id
into #temp from tbl

;with h1 as (
select
Name
,Family
,Min(Id) as Id
from #temp
group by Name, Family)
,h2 as (
Select
t.Name
,t.Family
,t.Address
,t.Phone
from #temp t inner join h1 on t.Id = h1.Id)

Select * from h2
drop table #temp


دمت جیز ، کاملا درست کار کرد ! نمیدونی چه مشکلی رو برام حل کردی،چند روز بود که تو مخم خره شده بود.
با اینی که شما برام نوشتی از برنامه نویسی نا امید شدم :عصبانی++:
یعنی من باید چقدر دیگه کار کنم تا این چیز ها رو بتونم بنویسم!!؟؟ :اشتباه:

Reza_Yarahmadi
یک شنبه 11 مهر 1389, 12:01 عصر
دستورات عجيبي ننوشتم
بخش اولش فرض كردم شما فيلد ID نداريد (يا هر فيلد يونيك ديگه اي) اومدم به جدول مورد نظر يك فيلد Id كه identity هم هست اضافه كردم و توي يك جدول كمكي (temp#) ريختم.
بعد با group by 2 فيلد مورد نظر رو دسته بندي كردم و كوچكترين Id رو به ازا هر دسته بندي نگه داري داشتم.
در آخر هم از نتيجه group by با جدول اصلي يه Join زدم كه كل فيلدها رو برگردونه و جدول كمكي رو حذف كردم.

اگه با دقت بيشتري به كدها نگاه كنيد ميبينيد كدهاي پيچيده اي نيست!:چشمک:
اگه هر جاييش سوال داشتيد بپرسيد يا من يا دوستان ديگه جواب ميدن.
موفق باشيد.

airsoft
یک شنبه 11 مهر 1389, 12:25 عصر
دستورات عجيبي ننوشتم
بخش اولش فرض كردم شما فيلد ID نداريد (يا هر فيلد يونيك ديگه اي) اومدم به جدول مورد نظر يك فيلد Id كه identity هم هست اضافه كردم و توي يك جدول كمكي (temp#) ريختم.
بعد با group by 2 فيلد مورد نظر رو دسته بندي كردم و كوچكترين Id رو به ازا هر دسته بندي نگه داري داشتم.
در آخر هم از نتيجه group by با جدول اصلي يه Join زدم كه كل فيلدها رو برگردونه و جدول كمكي رو حذف كردم.

اگه با دقت بيشتري به كدها نگاه كنيد ميبينيد كدهاي پيچيده اي نيست!:چشمک:
اگه هر جاييش سوال داشتيد بپرسيد يا من يا دوستان ديگه جواب ميدن.
موفق باشيد.

از حسن توجهتون ممنون،چون چند روز درگیرش بودم فهمیدم چی نوشتین،ولی تعجب من از این بود که چه جوری به ذهنتون خطور کرده بود،مخصوصا اون جا که min زده بودین.