PDA

View Full Version : سوال: ایجاد دسته بندی در crosstab ، شمارش تعداد رکوردها با ایجاد یک بازه عددی



momimomi
پنج شنبه 10 تیر 1395, 04:00 صبح
مهندسین ایرانی سلام
بنده با دستور کراس تب یک کوئری ایجاد کردم و اطلاعات رو از اکسس به سی شارپ پاس میدهم که خروجی به صورت زیر است:

141176

اینم کوئریش هست:

TRANSFORM Count(azmoon_personel.[code]) AS CountOfcode
SELECT azmoonha.name, Count(azmoon_personel.[code]) AS [تعداد کل]
FROM azmoonha INNER JOIN azmoon_personel ON azmoonha.id = azmoon_personel.id
GROUP BY azmoonha.name
PIVOT azmoon_personel.[nomreh];




اما میخوام نمره ها رو تک تک نشون نده بلکه تعداد قبولین (نمره بالای 10)، تعداد مردودین (زیر نمره 10) و تعداد غائبین (فاقد نمره) آزمون را به تفکیک هر آزمون نشون بده، به شکل زیر:

141177
دوستان و مهندسین عزیز، لطفا نظرات مفید خود را از بنده دریغ نفرمایید
با سپاس از شما بزرگواران

reza_ali202000
پنج شنبه 10 تیر 1395, 07:13 صبح
سلام دوست عزیز
جدول درس و دانشجو و ارتباطشون رو بزار تا بتونیم درست حسابی کمکت کنیم.
بنظر میاد از چندتا جدول این اطلاعات رو باید خوند.

momimomi
پنج شنبه 10 تیر 1395, 10:33 صبح
سلام دوست عزیز
جدول درس و دانشجو و ارتباطشون رو بزار تا بتونیم درست حسابی کمکت کنیم.
بنظر میاد از چندتا جدول این اطلاعات رو باید خوند.

مهندس عزیز سلام
این هم فایل بانک اطلاعاتی حاوی دو جدول استفاده شده و کوئری ایجاد شده:

141183

Mahmoud.Afrad
پنج شنبه 10 تیر 1395, 23:07 عصر
SELECT azmoon_personel.azmoonId, azmoonha.title,
COUNT (azmoon_personel.azmoonid) AS CountOfPerson,
COUNT ( IIF ((azmoon_personel.nomreh>=10) , 1 , null) ) AS CountOfPassed,
COUNT ( IIF ((azmoon_personel.nomreh < 10) , 1 , null) ) AS CountOfFailed,
COUNT ( IIF ((azmoon_personel.nomreh is null) , 1 , null) ) AS CountOfAbsents
FROM azmoon_personel INNER JOIN azmoonha ON azmoon_personel.azmoonId = azmoonha.id
GROUP BY azmoon_personel.azmoonid, azmoonha.title;
یا
SELECT azmoon_personel.azmoonId, azmoonha.title,
COUNT (azmoon_personel.azmoonid) AS CountOfPerson,
SUM ( IIF ((azmoon_personel.nomreh>=10) , 1 , 0 ) ) AS CountOfPassed,
SUM ( IIF ((azmoon_personel.nomreh < 10) , 1 , 0 ) ) AS CountOfFailed,
SUM ( IIF ((azmoon_personel.nomreh is null) , 1 ,0 ) ) AS CountOfAbsents
FROM azmoon_personel INNER JOIN azmoonha ON azmoon_personel.azmoonId = azmoonha.id
GROUP BY azmoon_personel.azmoonid, azmoonha.title;

momimomi
پنج شنبه 10 تیر 1395, 23:29 عصر
SELECT azmoon_personel.azmoonId, azmoonha.title,
COUNT (azmoon_personel.azmoonid) AS CountOfPerson,
COUNT ( IIF ((azmoon_personel.nomreh>=10) , 1 , null) ) AS CountOfPassed,
COUNT ( IIF ((azmoon_personel.nomreh < 10) , 1 , null) ) AS CountOfFailed,
COUNT ( IIF ((azmoon_personel.nomreh is null) , 1 , null) ) AS CountOfAbsents
FROM azmoon_personel INNER JOIN azmoonha ON azmoon_personel.azmoonId = azmoonha.id
GROUP BY azmoon_personel.azmoonid, azmoonha.title;
یا
SELECT azmoon_personel.azmoonId, azmoonha.title,
COUNT (azmoon_personel.azmoonid) AS CountOfPerson,
SUM ( IIF ((azmoon_personel.nomreh>=10) , 1 , 0 ) ) AS CountOfPassed,
SUM ( IIF ((azmoon_personel.nomreh < 10) , 1 , 0 ) ) AS CountOfFailed,
SUM ( IIF ((azmoon_personel.nomreh is null) , 1 ,0 ) ) AS CountOfAbsents
FROM azmoon_personel INNER JOIN azmoonha ON azmoon_personel.azmoonId = azmoonha.id
GROUP BY azmoon_personel.azmoonid, azmoonha.title;


مهندس عزیز بسیار لطف کردین و یک دنیا ممنون
این کوئری شماره و عنوان آزمون رو به صورت تعاملی از کاربر میگیره و نهایتا آمار یک آزمون رو نمایش میده، چطور می تونم تموم آزمونها رو در سی شارپ داخل یک گرید نمایش بدهم و کد و نام آزمون را از کاربر سوال نکند؟
باز هم ممنون

momimomi
جمعه 11 تیر 1395, 00:09 صبح
آقا حل شد
از شما مهندس گل جناب
Mahmoud.Afrad (http://barnamenevis.org/member.php?71297-Mahmoud-Afrad) بسیار بسیار سپاسگذارم
امیدوارم همیشه موفق باشی
ممنون که کارمو راه انداختی
با الهام گرفتن از کدهای شما مشکلم حل شد، به شکل زیر:




TRANSFORM Count(azmoon_personel.code) AS CountOfcode
SELECT azmoonha.name as [نام آزمون], Count(azmoon_personel.code) AS [تعداد کل]
FROM azmoonha INNER JOIN azmoon_personel ON azmoonha.id = azmoon_personel.id
GROUP BY azmoonha.name
PIVOT IIf(nomreh<10,"مردودین",IIf(nomreh>=10,"قبولین","غائبین"));



خروجی:
141195