PDA

View Full Version : مشکل در پیدا کردن مشتریانی که بیشترین سفارش را داده



L_eskandary
چهارشنبه 16 تیر 1389, 18:45 عصر
سلام دوستان عزیز
پیشاپیش از توجه تون ممنون...
من دو تا جدول دارم یکی برا مشتری و یکی برا کالاهایی که خریده ، می خوام اسامی مشتریانی رو پیدا کنم که بیشترین سفارش رو داده اند . مشکل اینجاست که من از top‌که استفاده می کنم در صورتی که دو مشتری دارای بیشترین تعداد سفارش باشند مثلا هر دوتا 100 سفارش ، در این صورت فقط اولی رو برام بر می گردونه .
کد:


Select top1 tblcustomer.c_id , c_name ,count(f_id) from
tblcustomer inner join tblSale on tblcustomer.c_id=tblSale.c_id
group by tblcustomer.c_id ,tblcustomer.c_name
order by count(f_id)


tblcustomer(c_id,c_name)
tblSale(f_id, c_id,m_id)
tblmahsul(m_id,m_name)


حالا سوالم اینه که چطور می تونم هر چند تا مشتری که دارای بیشترین مقدارن رو با هم بدست بیارم؟

L_eskandary
پنج شنبه 17 تیر 1389, 19:19 عصر
سلام دوستان عزیز
از اونجایی که هیشکی جواب سوالم رو نداد گفتم خودم بیشتر فک کنم ، من موفق شدم البته نمی دونم تا چه حد روشی که استفاده کردم درسته ولی به هر حال جواب میده:تشویق:
امیدوارم کار دوستانی هم که با این مسئله روبرو بودن راه بندازه...
من اول یه view درست کردم به صورت زیر :


create view customerOrder
as
Select tblcustomer.c_id , c_name ,count(f_id) as ordernum from
tblcustomer inner join tblSale on tblcustomer.c_id=tblSale.c_id
group by tblcustomer.c_id ,tblcustomer.c_name


بعد از اون هم به صورت زیر عمل کردم :


declare @a int
select top1 @a=count(f_id) from tblsale
group by c_id
order by count(f_id) desc
select * from customerorder where @a=Ordernum


موفق باشین...

MOJTABAATEFEH
پنج شنبه 17 تیر 1389, 21:09 عصر
سلام دوستان عزیز
پیشاپیش از توجه تون ممنون...
من دو تا جدول دارم یکی برا مشتری و یکی برا کالاهایی که خریده ، می خوام اسامی مشتریانی رو پیدا کنم که بیشترین سفارش رو داده اند . مشکل اینجاست که من از top‌که استفاده می کنم در صورتی که دو مشتری دارای بیشترین تعداد سفارش باشند مثلا هر دوتا 100 سفارش ، در این صورت فقط اولی رو برام بر می گردونه .
کد:


Select top1 tblcustomer.c_id , c_name ,count(f_id) from
tblcustomer inner join tblSale on tblcustomer.c_id=tblSale.c_id
group by tblcustomer.c_id ,tblcustomer.c_name
order by count(f_id)
tblcustomer(c_id,c_name)
tblSale(f_id, c_id,m_id)
tblmahsul(m_id,m_name)


حالا سوالم اینه که چطور می تونم هر چند تا مشتری که دارای بیشترین مقدارن رو با هم بدست بیارم؟

دوست عزیز شما


باید مشخص کنی بیشترین سفارش نسبت به چه مقداری
یا از مورد نظر 1 صرف نظر کنی مشتری که بیشترین سفارش رو داشته مشخص کنی که از نمونه کد شما مشخص مورد 2 رو می خوای حالا هر دو رو من توضیح می دم در مثال زیر از جدول های موقتی استفاده می کنیم



مورد 1.



select c_id,count(c_id) as CountF into #table1 from tblsale group by c_id

select tblcustomer.c_id,tblcustomer.c_name ,#table1.CountF from tblcustomer inner join tblsale on tblcustomer.c_id=#table1.c_id and #table1.CountF>10
drop table #table1



مورد 2.



declare @MaxF int
select c_id,count(c_id) as CountF into #table1 from tblsale group by c_id
select @MaxF=max(CountF) from #table1

select tblcustomer.c_id,tblcustomer.c_name ,#table1.CountF from tblcustomer inner join tblsale on tblcustomer.c_id=#table1.c_id and #table1.CountF=@MaxF
drop table #table1





موفق باشید

L_eskandary
شنبه 19 تیر 1389, 19:09 عصر
سلام مجدد
راستش با یه روش دیگه هم تونستم مشکلم رو حل کنم گفتم اونم بنویسم:


Select tblcustomer.c_id , c_name ,count(f_id) as ordernum from
tblcustomer inner join tblSale on tblcustomer.c_id=tblSale.c_id
group by tblcustomer.c_id ,tblcustomer.c_name
having count(f_id)= (select top 1 count(f_id) from tblsale
group by c_id order by count(f_id) desc)