ورود

View Full Version : مبتدی: کمک در Query نویسی



flower_2055
شنبه 24 بهمن 1388, 11:30 صبح
كد پرفروشترين كالا و كم فروشترين كالا ،

پركارترين و كم كارترين كاربر(از نظر تعداد خريد) رو از اين جدول (order)ميخوام خيلي فوري كمك كنيد .

codeP .username, date, Tedad, Price ,

محمد سلیم آبادی
شنبه 24 بهمن 1388, 13:45 عصر
--codeP .username, date, Tedad, Price

--1st Query
;WITH C1 AS
(SELECT SUM(Tedad) AS Tedad, CodeP
FROM Orders
GROUP BY CodeP)
SELECT TOP 1 WITH TIES CodeP
FROM C1
ORDER BY D.Tedad DESC

--2nd Query
;WITH C1 AS
(SELECT SUM(Tedad) AS Tedad, CodeP
FROM Orders
GROUP BY CodeP)
SELECT TOP 1 WITH TIES CodeP
FROM C1
ORDER BY D.Tedad ASC

--3nd Query
SELECT TOP 1 WITH TIES username
FROM (SELECT COUNT(*), username
FROM Orders
GROUP BY username) D(User_order, UserName)
ORDER BY D.User_order DESC

--4th Query
SELECT TOP 1 WITH TIES username
FROM (SELECT COUNT(*), username
FROM Orders
GROUP BY username) D(User_order, UserName)
ORDER BY D.User_order ASC

flower_2055
یک شنبه 25 بهمن 1388, 15:52 عصر
اين c1 چي هست .از همين ارور ميگيره .البته از كد هم هيچي نفهميدم

محمد سلیم آبادی
یک شنبه 25 بهمن 1388, 17:41 عصر
C1 نام CTE است. می تونین یک نمونه از داده هایتان ارسال کنید؟ مثلا :
Order {codeP=p1, username=user1, tedad=5, date=2009, price=200} --d

این کد رو برای پر کارترین کاربر استفاده کنید و جوابشو ارسال کنید:

select top 1 username
from order
group by username
order by sum(tedad) desc

flower_2055
یک شنبه 25 بهمن 1388, 17:51 عصر
يعني توي بقيه كدها جاي c1 چي بذارم

محمد سلیم آبادی
یک شنبه 25 بهمن 1388, 18:16 عصر
اول از همه، جواب سوالم را ندادین هنوز!
چطوری پرکارترین کاربر (فروشنده) رو محاسبه می کنید؟ یعنی کسی که تعداد بیشتری کالا فروخته یا کسی که به بیشترین مشتری سرویس داده؟

اگر قسمت اول سوال جواب مثبت داشته باشه این کوئری ها به ترتیب برای پرکارترین و کم کارترین کاربر و پرفروش و کم فروش ترین کالا استفاده کنید و از پست اولم صرف نظر کنید.

select top 1 username from order group by username order by sum(tedad) desc
select top 1 username from order group by username order by sum(tedad) asc
select top 1 codeP from order group by codeP order by sum(tedad) desc
select top 1 codeP from order group by codeP order by sum(tedad) asc

flower_2055
دوشنبه 26 بهمن 1388, 10:28 صبح
پرکارترین و کم کارترین کاربر از نظر تعداد خريد يعني منظورم اينه كه اينها خريدارن ومن هنوز نمي دونم چجوري اونها رو بدست بيارم مشكل من همينه .
اين كد ها كار ميكنه اما وقتي شرط تاريخ مثلا بين دو تاريخ رو مي خوام هيچي برنمي گردونه .يعني پركارترين كاربر از تاريخ fromdate@تا تاريخ todate@
اين جوري فكر كنم بايد از count استفاده بشه ولي كاملشو نمي دونم .ميشه كمك كنيد

محمد سلیم آبادی
دوشنبه 26 بهمن 1388, 10:50 صبح
اما وقتی شرط تاریخ مثلا بین دو تاریخ رو می خوام هیچی برنمی گردونه .

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

flower_2055
دوشنبه 26 بهمن 1388, 12:26 عصر
select top 1 username from orders where( date>=@FromDate AND date<=@ToDate )group by username order by sum(tedad) desc
اين براي كاربر پر كار مي نويسم . نوع date هم SmalldateTime هست .و هيچي بر نمي گردونه .

محمد سلیم آبادی
دوشنبه 26 بهمن 1388, 13:26 عصر
کوئری که استفاده می کنید صحیح است. باید مشکل سر پارامترها باشه.
یکبار بطور صریح و با مقدار مشخص تاریخ شروع و پایان کوئری را اجرا کنید ببینید بازم سطری بر نمگرده. اگر سطری بر نگشت ببینید که اصلا در آن تاریخ در جدولتان داده ای ذخیره شده یا نه.