PDA

View Full Version : اشتراک گرفتن در sql



taknavaz123
دوشنبه 28 آبان 1397, 07:46 صبح
با سلام.

دوستان میخوایم یه کوءری بنویسم که اگه در یک فاکتور کالاهای فاکتور اگر متعلق به 4 گروه مختلف کالا بودند شماره فاکتور رو بهم برگردونه و اگه کالاهای فاکتور در کمتر از 4 گروه بود چیزی بهم برنگردونه.


select code_customer,Factor_Number from Forosh
where (Goroh_kalah=1 and Goroh_kalah=2 and Goroh_kalah=3 and Goroh_kalah=4)
group by code_customer,Factor_Number

من این کد رو مینویسم .ولی هیچی بهم برنمیگردونه.در حالی که چند تا فاکتور دارم که 4 تا گروه کالای شرط شده درش وجود داره.
میشه بگید اشتباه کارم کجاست؟

svhasvha
دوشنبه 28 آبان 1397, 12:04 عصر
سلام جواب نمیده چون گروه کالا توی جدول فروش نمیتونه همزمان هم یک باشه هم 2 هم 3 هم 4
شما از اند استفاده کردی
صورت سوال یه خورده گنگه
اگه من درست متوجه شدم
شما میخوای بدونی اگه تو یه فاکتو یه یه تعداد اقلام کالا توش ثبت شده اگر یکی از کالا ها جزع 4 گروه خاص از گروه های کالا باشه اون شماه فاکتور رو برات برگردونه؟؟

اگه مسله اینه
where Goroh_kalah in (1,2,3,4)

اگه نه بیشتر توضیح بده واگه بتونی یه بک آپ از بانکد بفرستی راحت تر میشه کمک کرد

حمیدرضاصادقیان
دوشنبه 28 آبان 1397, 18:42 عصر
سلام
کدی که نوشتین درسته چون میخواهید در هر 4 تا گروه باشه ولی کدی که دوستمون نوشتن در هرکدوم باشه مقدار برمیگردونه واین با نیاز شما تفاوت داره
بهتره یک نمونه دیتایی رو قرار بدین که ببینیم ساختار دیتایی شما چه شکلیه براساس اون بشه کوئری رو پیشنهاد داد

taknavaz123
سه شنبه 29 آبان 1397, 08:24 صبح
سلام
کدی که نوشتین درسته چون میخواهید در هر 4 تا گروه باشه ولی کدی که دوستمون نوشتن در هرکدوم باشه مقدار برمیگردونه واین با نیاز شما تفاوت داره
بهتره یک نمونه دیتایی رو قرار بدین که ببینیم ساختار دیتایی شما چه شکلیه براساس اون بشه کوئری رو پیشنهاد داد
سلام.با تشکر از توجهتون.
ببنید مثلا فرض کنیم 3 تا فاکتور داریم که در هر فاکتور 10 قلم جنس وجود داره.
اقلامی که در فاکتور شماره 1 وجود دارند مربوط به گروه کالاهای 1 و 3 و 6 و 7 و 10 هستند
اقلامی که در فاکتور شماره 2 وجود دارند مربوط به گروه کالاهای 1و2 و3و 4 هستند
اقلامی که در فاکتور شماره 3 وجود دارند به گروه کالاهای 1و3 هستند.
حالا من میخوام فقط شماره فاکتوری و نام مشتری رو بهم برگردونه که کالاهای اون فاکتور، حتما شامل 4 گروه کالای 1و2و3و4 باشن.
یعنی در واقع فقط باید فاکتور شماره 2 رو بهم برگردونه (اشتراک)

البته یه حالت دیگه هم مد نظرم هست .اونم اینجوریه که که اگه فاکتوری 4 گروه کالا رو پوشش داد شماره فاکتور رو بهم برگردونه.یعنی دیگه تو where نیام صراحتا شماره گروه کالاها رو بیارم.یه حالت شناور داشته باشه.
که در این صورت اینجوری باید هم فاکتور شماره 1 و هم فاکتور شماره 2 رو بهم برگردونه که اگه اشتباه نکنم اینجا میشه با having count(goroh_kala)>=4 به جواب رسید



ممنون میشم برای هر دو حالت و مخصوصا حالت اول راهنمایی بفرمائید

Mahmoud.Afrad
سه شنبه 29 آبان 1397, 19:30 عصر
سلام.با تشکر از توجهتون.
ببنید مثلا فرض کنیم 3 تا فاکتور داریم که در هر فاکتور 10 قلم جنس وجود داره.
اقلامی که در فاکتور شماره 1 وجود دارند مربوط به گروه کالاهای 1 و 3 و 6 و 7 و 10 هستند
اقلامی که در فاکتور شماره 2 وجود دارند مربوط به گروه کالاهای 1و2 و3و 4 هستند
اقلامی که در فاکتور شماره 3 وجود دارند به گروه کالاهای 1و3 هستند.
حالا من میخوام فقط شماره فاکتوری و نام مشتری رو بهم برگردونه که کالاهای اون فاکتور، حتما شامل 4 گروه کالای 1و2و3و4 باشن.
یعنی در واقع فقط باید فاکتور شماره 2 رو بهم برگردونه (اشتراک)

البته یه حالت دیگه هم مد نظرم هست .اونم اینجوریه که که اگه فاکتوری 4 گروه کالا رو پوشش داد شماره فاکتور رو بهم برگردونه.یعنی دیگه تو where نیام صراحتا شماره گروه کالاها رو بیارم.یه حالت شناور داشته باشه.
که در این صورت اینجوری باید هم فاکتور شماره 1 و هم فاکتور شماره 2 رو بهم برگردونه که اگه اشتباه نکنم اینجا میشه با having count(goroh_kala)>=4 به جواب رسید



ممنون میشم برای هر دو حالت و مخصوصا حالت اول راهنمایی بفرمائید

اگر فقط میخواهید که کالاهایی از 4 گروه مختلف در فاکتور باشند دقیقا باید از having استفاده کنید . نکته اینکه در count(goroh_kala) یک distinct داخل پرانتز بگذارید. چون ممکن هست از یک گروه چند قلم کالا در فاکتور باشد
http://sqlfiddle.com/#!9/cbde73/2

taknavaz123
چهارشنبه 30 آبان 1397, 07:29 صبح
اگر فقط میخواهید که کالاهایی از 4 گروه مختلف در فاکتور باشند دقیقا باید از having استفاده کنید . نکته اینکه در count(goroh_kala) یک distinct داخل پرانتز بگذارید. چون ممکن هست از یک گروه چند قلم کالا در فاکتور باشد
http://sqlfiddle.com/#!9/cbde73/2

نه.مورد اول بیشتر مد نظرمه.حالت دوم و استفاده از having با رعایت distinct رو مشکلی ندارم.
ولی برای حالت اول نمیدونم چیکار کنم

Mahmoud.Afrad
چهارشنبه 30 آبان 1397, 11:00 صبح
نه.مورد اول بیشتر مد نظرمه.حالت دوم و استفاده از having با رعایت distinct رو مشکلی ندارم.
ولی برای حالت اول نمیدونم چیکار کنم

یعنی لیست گروه را هم خودتون میخواهید تعیین کنید؟
اگر بله لینک زیر جواب شماست.
http://sqlfiddle.com/#!9/ebcc7c/6
به جای جدول requested از متغیر یا پارامتر برای ارسال گروه کالاهای مورد نظر استفاده کنید.


به طریقی باید چک شود همه رکوردهای گروه دارای مقدار مورد نظر هست یا نه.

دوستان شاید راه بهتری پیشنهاد بدن.

حمیدرضاصادقیان
چهارشنبه 30 آبان 1397, 20:23 عصر
اگر اسم گروهها و شماره گروهها و تعدادش نیز ممکنه تغییرکنه و کم و زیاد بشه بهتره رشته Where رو به صورت Dynamic بسازیدو به یک SP پاس بدین

taknavaz123
پنج شنبه 01 آذر 1397, 10:55 صبح
اگر اسم گروهها و شماره گروهها و تعدادش نیز ممکنه تغییرکنه و کم و زیاد بشه بهتره رشته Where رو به صورت Dynamic بسازیدو به یک SP پاس بدین

ممنون.ولی ثابته گروه ها.
الان فعلا گیر همین ثابتم که هیچ خروجی بهم نمیده