ورود

View Full Version : شمارش تعداد مشخص از چند فیلد



Nazir Ahmad
چهارشنبه 26 تیر 1392, 14:20 عصر
سلام خدمت تمام اساتید و دوستان گرام

باز هم لطف میکنید اگز به بنده کمک کنید.
مشکل من اینه که میخوام مقادیر مشخصی رو از داخل یک فیلد از یک کوییری شمارش کنم.
مثلا چند کلاس در دو شیفت داریم که میخواهیم تعداد دانش‌آموزانی که در نمرات امتحان قبول شدند رو مشخص کنیم.
اگر فایل نمونه رو ببینید بهتر متوجه خواهید شد.
البته یه کار دیگه هم میشه اگر روش اول نشد لطفا در روش دوم کمک کنید.
روش دوم اینه که در گزارشی که از کوییری میگریم و با استفاده از سورت و گروپ تعداد کلاسها و شیفت ها رو از همدیگه جدا میکنیم. حالا میخواهیم تعداد شاگردان هر کلاس، تعداد شاگردان قبول و تعداد شاگردانی که مردود شدند در عنوان هر کلاس توسط فرمولی در گزارش محاسبه بشود.

ممنون
یا حق

master13111
چهارشنبه 26 تیر 1392, 18:18 عصر
از DCount استفاده نکنید. بهتره از دو تا Select استفاده کنید که یکی برای شمارش تعداد قبول و یکی برای شمارش تعداد مردود
من کوئری تونو به اینصورت اصلاح کردم
البته بخاطر اینکه خودمو راحت کنم اسامی فیلدهای کلاس و شیفت و سال رو به انگلیسی و به ترتیب sal,shft,cls و اسم کوئری نتیجه رو به n تغییر دادم. با این حساب Query4 مثال شما شد این


SELECT n1.cls, n1.shft, n1.sal, Count(n1.[st-ID]) AS [CountOfst-ID], Count(n1.Natijeh4) AS CountOfNatijeh4, (SELECT Count(n2.Natijeh4)
FROM n as n2
WHERE (((n2.Natijeh4)="مردود")) and (n2.sal=n1.sal) and (n1.cls=n2.cls) and (n1.shft=n2.shft)) AS مردود, (SELECT Count(n3.Natijeh4)
FROM n as n3
WHERE (((n3.Natijeh4)="قبول")) and (n3.sal=n1.sal) and (n3.cls=n1.cls) and (n1.shft=n3.shft)) AS قبول
FROM n AS n1
GROUP BY n1.cls, n1.shft, n1.sal;


اینم فایل اصلاح شده

Nazir Ahmad
چهارشنبه 26 تیر 1392, 21:11 عصر
از DCount استفاده نکنید. بهتره از دو تا Select استفاده کنید که یکی برای شمارش تعداد قبول و یکی برای شمارش تعداد مردود
من کوئری تونو به اینصورت اصلاح کردم
البته بخاطر اینکه خودمو راحت کنم اسامی فیلدهای کلاس و شیفت و سال رو به انگلیسی و به ترتیب sal,shft,cls و اسم کوئری نتیجه رو به n تغییر دادم. با این حساب Query4 مثال شما شد این


SELECT n1.cls, n1.shft, n1.sal, Count(n1.[st-ID]) AS [CountOfst-ID], Count(n1.Natijeh4) AS CountOfNatijeh4, (SELECT Count(n2.Natijeh4)
FROM n as n2
WHERE (((n2.Natijeh4)="مردود")) and (n2.sal=n1.sal) and (n1.cls=n2.cls) and (n1.shft=n2.shft)) AS مردود, (SELECT Count(n3.Natijeh4)
FROM n as n3
WHERE (((n3.Natijeh4)="قبول")) and (n3.sal=n1.sal) and (n3.cls=n1.cls) and (n1.shft=n3.shft)) AS قبول
FROM n AS n1
GROUP BY n1.cls, n1.shft, n1.sal;


اینم فایل اصلاح شده

ممنون دوست عزیز
کاملاً همون چیزی بود که میخواستم
اما اگر ممکنه درباره دستور select یه کم توضیح بدید چون ما جدول یا کوییری به نام n1, n2 یا n3 نداریم و اونا چی هستند. و اینکه اگر ما خواسته باشیم یه شرط دیگه علاوه بر کلاس, شیفت و سال به کوییری اضافه کنیم مثلا شعبه یا نمایندگی شماره 1 یا 2 باید چه جوری از select استفاده کنیم؟

بازم ممنون
یا حق

master13111
پنج شنبه 27 تیر 1392, 12:46 عصر
ببینید من از یه کوئری یا جدول سه بار select گرفتم. برای اینکه فیلدا با هم قاطی نشد هر کدوم از جداول رو توی هر کدوم از سلکت ها به یه اسم معرفی کردم مثلا برای سلکت مردودها نوشتم
from n as n2
به این ترتیب اون فیلدایی که مال جدول n2 هستند در واقع مال سلکت مربوط به مردود هستند. به همین ترتیب n3 برای قبول و n1 برای جدول اصلی

اگه بخواین شرط دیگه ای اضافه کنید, در جدول اصلی که جزو گروپ میاد اما در دو تای سلکت بعدی به شرط where اضافه میکنید به این ترتیب
n1.shobe=n2.shobe

Nazir Ahmad
شنبه 29 تیر 1392, 23:34 عصر
ببینید من از یه کوئری یا جدول سه بار select گرفتم. برای اینکه فیلدا با هم قاطی نشد هر کدوم از جداول رو توی هر کدوم از سلکت ها به یه اسم معرفی کردم مثلا برای سلکت مردودها نوشتم
from n as n2
به این ترتیب اون فیلدایی که مال جدول n2 هستند در واقع مال سلکت مربوط به مردود هستند. به همین ترتیب n3 برای قبول و n1 برای جدول اصلی

اگه بخواین شرط دیگه ای اضافه کنید, در جدول اصلی که جزو گروپ میاد اما در دو تای سلکت بعدی به شرط where اضافه میکنید به این ترتیب
n1.shobe=n2.shobe

با سلام دوباره
نمیدونم چرا هرکار میکنم جواب نمیده
من دقیقا همون دستوراتی که در select بیان کرده بودید رو انجام دام اما همش پیغام خطا میده
اول نام فیلدها فارسی بود که تبدیل کردم به انگلیسی اما باز هم نشد
البته شروطی که من میخوام انتخاب کنم از دو جدول مجزاست یعنی سال از یک جدول و کلاس، شیفت و شعبه از یک جدول دیگه و ارتباط بین این دوجدول هم st-ID است
لطفا اگر وقت دارید یه نگاه به فایل ضمیمه بندازید
ممنون
یا حق

master13111
یک شنبه 30 تیر 1392, 11:19 صبح
شما دو بار فیلد سال رو لود کردین و همینطور دو بار فیلد std_id اونم از دو جدول مختلف. در نتیجه به عنوان مثال فیلدی به نام std_id ندارین بلکه natije3.std_id دارین و همینطور برای سال.
من در کوئری n فیلدارو به اینصورت نام گذاری کردم sal1, std_id1 و کوئری رو اصلاح کردم
اینجوری

Nazir Ahmad
شنبه 16 آذر 1392, 13:25 عصر
سلام دوباره خدمت تمام اساتید

اگر لطف کنید همکاری کنید ممنون میشم
همونطور که در پست بالا دوست عزیز master13111 http://barnamenevis.org/images/buttons/viewpost-left.png (http://barnamenevis.org/showthread.php?p=1823926#post1823926) زحمت کشیدند مشکل من حل شد. اما مشکل دیگه اینه که من تعداد شرطهای داخل کویری رو بیشتر کردم و الان کویری به سختی باز میشه و حتی تو کامپیوتر بعضی از کابران اصلان باز نمیشه و پیغام query is too complex رو میده. یعنی کویری خیلی سنگین شده.
اگر دوستان لطف کنند و مشکل رو طور دیگه ای طرف کنند ممنون میشم

ممنون
یا حق

Nazir Ahmad
شنبه 23 آذر 1392, 09:38 صبح
دوستان کسی نبود کمک کنه؟