ورود

View Full Version : گفتگو: گزارش گيري cross-tab



ali_ahr7
پنج شنبه 19 فروردین 1389, 11:03 صبح
بنام خدا
مقدمه
سلام به همه.چند وقت پيش درگير نوعي گزارشگيري شدم به نام cross-tab خيلي توي سايت جستجو كردم ولي چيز مفيدي پيدا نكردم با خودم قرار گذاشتم وفتي مشكلم حل شد راه حل و هرچيزي كه درباره اين نوع گزارش گيري ياد گرفتم در يه تاپيك گفتگو بگدارم تا همه استفاده كنند و دانسته هاشون رو بگن.بالاخره با كمك جناب m-salim مشكلم حل شد و من هم تصميم گرفتم اين تاپيك رو ارسال كنم.البته من حرفه اي نيستم ولي دوست دارم همين معلومات اندكم رو با دوستان در ميان بگذارم.


تا حالا شده بخواين يه گزارش آماري رو بر حسب دو پارامتر داشته باشين؟
مثلا فرض كنين گزارشي ميخواين كه ليست فعاليت هاي انجام شده توسط دانشجو ها و تعدادشون در سال 89 رو به شما بده.همونطور كه ميدونيد براي اين كار بايد از كوئري زير استفاده كرد:


select faliyat,count(faliyat)from tbstudent where year=1389

ولي سوال اينجاست كه چطور ميشه همين آمار رو براي دانشجوهاي سال هاي 86 تا 89 بدست آورد؟
يعني جواب كوئري شما يك جدول باشه كه كليوم هدرش شماره سال و row هدرش
نوع فعاليت باشه.
من خيلي مايلم كه اين مطلب رو ادامه بدم.از دوستان خواهش ميكنم در صورت تمايل نظرشون رو بگن.و ادامه مطلب رو بدن تا من بيشتر به ادامه اين تاپيك اميدوار بشم.پس تا بعد.

محمد سلیم آبادی
پنج شنبه 19 فروردین 1389, 12:57 عصر
سلام،
قبلا یک پست راجب این موضوع در وبلاگم زده بودم ولی الان سایت persianblog.ir نمی دونم چرا باز نمیشه تا لینکشو براتون ارسال کنم.

آقای Joe Celko در کتاب معروف خود با عنوان Joe Celko's for smarties: Advanced SQL Programming در یکی از فصولش به این گزارش آماری رایج پرداخته است.

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

آقای Celko به دو روش آکادمیک هم پرداخته که درکش برای تازه کار ها می تونه سخت باشه.

یک روش هم که واقعا ساده است و تنها از سه ماده ی FROM و WHERE و SELECT استفاده میکنه وجود داره ولی سرعتش واقعا نا مناسبه و هزینه ی بالایی هم داره.