PDA

View Full Version : مشکل با محاسبه شهریه دانش آموز



veniz2008
جمعه 31 شهریور 1391, 10:05 صبح
سلام. فرض کنید دانش آموزی 10 آزمون ثبت نام کرده. فرضا 6 آزمون اول رو از یک طرح (سهمیه) استفاده کرده و 4 آزمون بعدی رو از یک طرح دیگه برای تخفیف استفاده کرده باشه. چطور میتونم تعداد آزمون های دانش آموز رو براساس طرحی که داره بدست بیارم؟. دوستان دقت کنید که من نمیدونم دانش آموز از چند طرح استفاده کرده( یک دانش آموز ممکنه هیچ طرح و سهمیه ای نداشته باشه و یکی دیگه ممکنه چندین طرح رو داشته باشه). من میخوام درون یک sp محاسبه شهریه رو انجام بدم ولی هرچی فکر میکنم دستوری به ذهنم نمیرسه که بگه تعداد ازمون برای طرح1 چقدره و تعداد ازمون برای طرح2 چندتاست.(من برای محاسبه شهریه باید بصورت تفکیک شده به تعداد آزمون های دانش آموز با توجه به طرح (سهمیه ای) که داره دسترسی داشته باشم). دوستان یک عکس از جدول میزارم تا منظورمو بهتر متوجه بشید. در شکل زیر برای دانش آموز با شماره داوطلبی 22001111 سه طرح مختلف ثبت شده است.
93167

FastCode
جمعه 31 شهریور 1391, 11:12 صبح
شبیه این باید باشه.
select distinct Tarh,(select Count(*) from Azmoon as A2 where A2.Tarh=A1.TTarh) from Azmoon as A1

در این سوالات باید حتماً ساختار جداولتون رو قرار بدید.

veniz2008
جمعه 31 شهریور 1391, 11:25 صبح
جدول رو در پست اول اضافه کردم. در این جدول در زمان ثبت ازمون ها شماره طرح هم ثبت میشه. مثلا زمانیکه آزمون های 4 و 7 برای دانش آموز 22001111 ثبت شده شماره طرح هم (یعنی 3) برای دانش اموز ثبت شده. من چطوری باید از این جدول همزمان تعداد آزمون های هر طرح رو بیرون بکشم؟(یعنی طرح1 ، دوتا آزمون ، طرح 3 هم دوتا آزمون و طرح2 هم یک ازمون).

veniz2008
جمعه 31 شهریور 1391, 11:48 صبح
دستوری که گفته بودید درون یک کوئری اجرا کردم و نتیجه داد ولی مشکلم اینه که چطور این مقادیر رو بکشم بیرون؟. بذارید بیشتر توضیح بدم. من قیمت آزمون ها رو دارم ( priceexam که برای هر آزمون 12500 هستش).الان باید فرمولی بنویسم بصورت زیر :
تعداد آزمون طرح1 * مبلغ آزمون * درصد تخفیف طرح 1
تعداد آزمون طرح2 * مبلغ آزمون * درصد تخفیف طرح 2
تعداد آزمون طرح3 * مبلغ آزمون * درصد تخفیف طرح 3
مجموع 3 خط بالا، مبلغ پرداختی رو مشخص میکنه.با توجه به نتیجه کوئری زیر میتونم سمت سی شارپ عمل محاسبه رو انجام بدم ولی آیا راهی هست که درون sp کل محاسبه رو انجام بدم؟
تعداد آزمون رو چطوری بیرون بکشم؟. من نتیجه کوئری رو میزارم. الان درون جدول زیر چطور این مقادیر رو بیرون بکشم؟
کدی که نوشتم :

select distinct TarhID,(select COUNT(*) from TblActiveExam where StudentID = 22001111 and TblActiveExam.TarhID = A1.TarhID) from TblActiveExam as A1
تصویری از نتیجه :
93168

FastCode
جمعه 31 شهریور 1391, 12:16 عصر
Count(*) میشه Sum(PriceExam) و یک ستون دیگه اضافه میشه Sum(PriceExam*DiscountPercent)/Sum(PriceExam)

veniz2008
جمعه 31 شهریور 1391, 12:23 عصر
Count(*) میشه Sum(PriceExam) و یک ستون دیگه اضافه میشه Sum(PriceExam*DiscountPercent)/Sum(PriceExam)
این قسمت رو متوجه نشدم. میشه بیشتر توضیح بدید.

FastCode
جمعه 31 شهریور 1391, 21:03 عصر
یعنی اینطوری
select distinct A0.Tarh,(select Count(A1.*) from Azmoon as A1 where A1.Tarh=A0.Tarh), (select Sum(A2.PriceExam) from Azmoon as A2 where A2.Tarh=A0.TTarh), (select Sum(A3.PriceExam*DiscountPercent)/Sum(A3.PriceExam) from Azmoon as A3 where A3.Tarh=A0.TTarh) from Azmoon as A0

Reza_Yarahmadi
سه شنبه 04 مهر 1391, 09:59 صبح
یک راه حل دیگه که این تعداد Select تودرتو نداشته باشه: (در صورت استفاده از SQL Server 2005 به بالا - جدول Dis مربوط به تخفیف هر طرح است) With Res as( Select A.StudentID ,A.Tarh ,Count(*) AS CountOfTarh ,(Count(*) * MIN(A.PriceExam) * MIN(D.Discount)) as TotalExamPrice From Azmoon A Inner Join Dis D ON A.Tarh = D.Tarh Group By A.StudentID, A.Tarh) Select StudentID ,SUM(TotalExamPrice) as TotalPrice ,SUM(CountOfTarh) as CountOfTarh From Res Group By StudentID