PDA

View Full Version : مشکل در گروه بندی کردن با Group by



hqsoroush
چهارشنبه 06 مهر 1390, 21:43 عصر
سلام عزیزان.
من سه جدول ایجاد کردم با این Relation

75970

حالا این دستور رو واسه اش مینویسم:


SELECT Asami.Name, Asami.Family, Asami.FatherName, Parvandeh.ShParvandeh, JoziyateParvandeh.ShPelakAsli, JoziyateParvandeh.ShPelakFaree
FROM Asami INNER JOIN
JoziyateParvandeh ON Asami.ShShAsami = JoziyateParvandeh.ShShAsami INNER JOIN
Parvandeh ON Asami.ShParvandeh = Parvandeh.ShParvandeh
GROUP BY Asami.Name, Asami.Family, Asami.FatherName, Parvandeh.ShParvandeh, JoziyateParvandeh.ShPelakAsli, JoziyateParvandeh.ShPelakFaree


و نیجه اش اینه:

75972

همونطور که میبینید 4 رکورد دارم که توی دو تای اونها مقدار داخل فیلد ShParvandeh تکرار شده.2تا 900 دارم و 2تا 901.حالا میخوام 1دونه 900 و 1 دونه 901 نشون من بده.
و بر اساس همین فیلد بطور صعودی مرتب بشه.
(ضمنا توی جداول دیگه هم اطلاعات دارم اگه لازم دونستید محتویاتش رو نشون بدم).
لطفا راهنمایی کنید.
مرسی

sanay_esh
چهارشنبه 06 مهر 1390, 22:54 عصر
اصلا این نوع کوئری نوشتن اشتباه است چون اطلاعاتی رو که شما میخواهید بر اساس اون فیلتر بشه و به شما نشان بده
وجود نداره و اگر هم بخواهید تکراری های یک آیتم رو حذف کنید باید آیتم های مورد نظر را انتخاب و در ابتدا آنها را گروه بندی و بعد بقیه داده های مربوط به این آیتم را نشان دهید

در هر صورت با این روش کوئری نمی توان به یه نتیجه مطلوب و یا داده های مفید و طبقه بندی شده رسید !

البته ببخشید من اینطوری پاسخ دادم قصدم کمک هست اگر بیشتر بگی که چی میخوایی میتونم بهتر راهنماییت کنم !

mehran_sh_t
پنج شنبه 07 مهر 1390, 10:14 صبح
سلام
در رکورد هایی که دوتا دوتا تکرار شدند، بقیه فیلد ها تکراری نیستند، مثلا برای 900، ShShAsami، مقادیر 111 و 112 رو داره، و... .
اگر بخواید باز هم Group کنید، باید قید بقیه فیلد ها رو بزنید، پس به طور خلاصه تر هم میشه نوشت...

hqsoroush
پنج شنبه 07 مهر 1390, 11:36 صبح
با سلام خدمت دوست عزیزم.


لبته ببخشید من اینطوری پاسخ دادم قصدم کمک هست اگر بیشتر بگی که چی میخوایی میتونم بهتر راهنماییت کنم !

نمیدونم این جمله از لحاظ ادبی درسته یا نه::گیج:
هرجه از دوست رسد خوش است.
شاید هم هرجه از دست دوست رسد خوش است.
بالاخره با دست تون تایپ کردید، برای من.:لبخند:

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

ببینید من میخوام توی برنامه ای که دارم روی اون کار میکنم، فقط یکی از این ShParvandeh های تکراری وجود داشته باشه.
مثلا به این صورت:
محمد حسین پناهیان علیرضا 1 900 111

میثم مرادی رضا 1 901 113

میبینید؟تکرارها حذف شدند.
اگه ابهامی هست بگید.
مرسی دوست عزیزم Sanay_esh.
:چشمک:

یوسف زالی
پنج شنبه 07 مهر 1390, 15:21 عصر
سلام.
با اجازه سایر دوستان، کمی در مورد گروه بندی صحبت کنم.
شما وقتی دارید گروه بندی رو انجام می دید در حقیقت برای گروه های متفاوتی که ایجاد می شه نماینده هایی رو از داده انتخاب می کنید.
به طور مثال اگر دارید Sum می گیرید، select sum(F1), F2 from TBL علت اینکه SQL به فیلد F2 شما اعتراض می کنه اینه که نمی دونه برای F2 باید از کدوم نماینده مقداری استفاده کنه.
به همین دلیل یا باید نمایندگی داده رو مشخص کنید، مثلا Max اونها select sum(F1), max(F2) from tbl،
یا اینکه معین کنید که گروه هایی که ایجاد می کنید در هر گروه یک F2 منحصر بفرد وجود داره و گروه بندی خودتون رو به اون هم وابسته می کنید: select sum(F1), F2 from Tbl group by F2

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

رفع مشکل به صورت کامل:
فقط ستونهایی رو انتخاب کنید که با استفاده از اونها بتونید به طور یکتا به یک ردیف داده دسترسی داشته باشید. در اینجا shshasami
select min(ShShAsami), ShParvande from TBL group by ShParvande

حالا از این طریق داده های تکمیلی خودتون رو اضافه کنید. کد کامل :


select * from Tbl where ShShAsami in (select min(ShShAsami) from Tbl group by ShParvande) -- test

موفق باشید.

sanay_esh
پنج شنبه 07 مهر 1390, 15:51 عصر
خواهش میکنم
اگر دیتای شما را بتونم داشته باشم بیشتر و راحت تر و سریع تر میتونم کمکت کنم
یا مثل تاپیک اولی که گذاشتید بذارید و بگید که چی رو میخواهید بدست بیارید بنده براتون حل کنم