PDA

View Full Version : سوال: یک کوئری بر روی دیتا بیس pubs



danial82
پنج شنبه 23 دی 1389, 13:34 عصر
با سلام خدمت دوستان
فکر کنم همه با دیتا بیس pubs آشنا هستند تو نوشتن query دچار مشکل شدم
من میخوام بدونم نسبت فروش هر نوع کتاب در یک ماه خاص چه درصدی از فروش کل اون کتاب بوده؟

Reza_Yarahmadi
پنج شنبه 23 دی 1389, 15:21 عصر
فکر کنم همه با دیتا بیس pubs آشنا هستند تو نوشتن query دچار مشکل شدم
فکر کنم یک نفر پیدا شده که آشنا نیست!! :گیج:
در صورت امکان اسکریتی از این دیتابیس و داده های اون قرار بدید تا بشه روش تست کرد.

iman_Delphi
پنج شنبه 23 دی 1389, 20:56 عصر
من ديتابيس pubs رو ندارم و امكانشم نبود download كنم اما دوست دارم كمكتون كنم

شما اول يك كوئري بزنيي روي جدول فروش كل كتاب ها و sum كلش رو بگيرين (گروه بندي بشه بر حسب كد كتاب) سپس براي اين كوئري كه زدين يك كرسر بنويسين و برحسب هر كد كتاب يك سلكت بزنين كه توي اين سلكته بايد sum هر ماه يا ماه مورد نظر رو محاسبه كنيد و در يك return @Table ذخيره كنيد
يك راه حل ساده تر هم هست اونم استفاده از sub Query هست
كه اينجوريه : من ساختار pubs رو يادم نميادااااا اماا :


SELECT Code, Sum(price),(select Sum(Price) FROM t2 where t1.code=t2.code and datefactor betwen 1.1.1 and 2012.01.12) from t1 group by......

البته روش اول رو پيشنهاد مي كنم چرا كه احساس مي كنم در حال تكميل كردن و يادگيري هستين مثل من - ممنون

danial82
شنبه 25 دی 1389, 11:42 صبح
با تشکر از دوستانی که توجه کردن
pubs یک دیتابیس آموزشی در SQL2000
از اینجا (http://utilities.persiangig.com/Pubs.rar)دانلود کنید
دوستان میخوام با کوئری به نتیجه برسم

Reza_Yarahmadi
شنبه 25 دی 1389, 21:24 عصر
در صورت استفاده از SQL Server 2005 به بالا

With AllSales as(
Select
Title_Id,
Sum(qty) as TotalSales
From
dbo.Sales
group by
Title_Id)
,Sales2 as(
Select
Title_Id,
qty,
Cast(Year(ord_Date) as varchar) + '/' + Cast(Month(ord_Date) as varchar) as Months
From
dbo.Sales
)
Select
S.Title_Id,
Min(A.TotalSales) as TotalSales,
Sum(S.qty) as SalesOnMonth,
(Sum(S.qty) * 100 / Min(A.TotalSales)) as PercentSales,
Months
From
Sales2 S inner join AllSales A
On
S.Title_Id = A.Title_Id
Group By
S.Title_Id, Months
Order By
S.Title_Id
در صورت استفاده از SQL Server 2000 (در مورد توابع Month و Year نمیدونم 2000 پشتیبانی میکنه یا نه)

Select
S.Title_Id,
Min(A.TotalSales) as TotalSales,
Sum(S.qty) as SalesOnMonth,
(Sum(S.qty) * 100 / Min(A.TotalSales)) as PercentSales,
Months
From
(Select
Title_Id,
qty,
Cast(Year(ord_Date) as varchar) + '/' + Cast(Month(ord_Date) as varchar) as Months
From
dbo.Sales
) S
INNER JOIN
(Select
Title_Id,
Sum(qty) as TotalSales
From
dbo.Sales
group by
Title_Id) A
On
S.Title_Id = A.Title_Id
Group By
S.Title_Id, Months
Order By
S.Title_Id

danial82
دوشنبه 27 دی 1389, 11:34 صبح
رضا جان خیلی خیلی ممنون
کوئری زبر میزان فروش هر کتاب در تاریخ 1994-09-13 به کل فروش اون کتاب رو می دهد


select t.title_id,d,t,d*100/t
--CAST(CAST(d/t AS decimal(38,4))AS real) AS حجم

from
(SELECT sum(qty) as D, titles.title_id
FROM sales INNER JOIN
titles ON sales.title_id = titles.title_id
where (sales.ord_date BETWEEN CONVERT(DATETIME, '1994-09-13 00:00:00', 102) AND CONVERT(DATETIME, '1994-09-13 00:00:00', 102))
GROUP BY titles.title_id
) as D
right outer join
(
SELECT sum(qty) as T, titles.title_id

FROM sales INNER JOIN
titles ON sales.title_id = titles.title_id
GROUP BY titles.title_id) as T
on D.title_id=T.title_id