PDA

View Full Version : تهیه فیش حقوقی با جمع کردن کراس تب



alizadeh.6725
یک شنبه 18 تیر 1391, 03:04 صبح
به نام خدا
سلام

کسی می تونه فایل پیوست منو اصلاح کنه (این برنامه یه تیکه از برنامه محل کار منه که دارم درست میکنم)

مشکل برنامه: می خوام فیش حقوقی تهیه کنم .من برای هر برنامه یه کراس تب گرفتم حالا این کراس تب باید باه هم جمع بشن تا فیش حقوقی من درسا کنن ولی من نمی دونم چیگار کنمو

alizadeh.6725
یک شنبه 18 تیر 1391, 14:54 عصر
اساتید محترم سوال ما جواب نداره یعنی هیچ راهی نداره که بتونم فیش حقوقی تکمیل کنم

alizadeh.6725
یک شنبه 18 تیر 1391, 19:58 عصر
یه نفر جواب ما رو بده لطفا
حداقل بگین این کار شدنی هست یا نه

Abbas Amiri
یک شنبه 18 تیر 1391, 22:55 عصر
منظور شما اینه که میخواهید رکوردهای دو کوئری را همزمان داشته باشید؟

alizadeh.6725
دوشنبه 19 تیر 1391, 01:13 صبح
بله.باهم داشته باشم تا بتنوم فیش حقوقی صادر کنم.

Abbas Amiri
دوشنبه 19 تیر 1391, 02:26 صبح
متاسفانه UNION کردن کوئریهای Crosstab با مشکلات ومحدودیت همراه است وفقط فیلدهای Row Heading را میتوان درخروجی داشت پیشنهاد بنده اینست که تمام اطلاعات را دریک جدول قراردهید (مثلا 8900) در اینصورت عملکرد تمام اعضا را در کوئری خواهید داشت

alizadeh.6725
دوشنبه 19 تیر 1391, 09:14 صبح
مشکل بزرگ اینه که تعداد برنام ها خیلیه حدود 30 تا . هرکدوم فیلدخای مختلفی داره که فقط 4 تا از این فیلد ها شبیه هم بقیه اش فرق داره پس نمی تونم تو یه جدول مشترک قرار بدم فقط یه راهی داره.
که 4 تا فیلد که شبیه همه تو 30 تا جدول بیاد تو یه کیوری یه جدول مشترک درست کنه این کار عملیه؟؟؟؟ ایا میشه ؟؟ یعنی اطلاعات اول بره تو 30 تا جدول بشینه بغد از اون 4 فیلد مشترکی که شییه هم یعنی (شناسه برنامه-ماه اجرا-اجرا کننده) یه جدول مشترک درست کنند.
اقای امیری لطفا کمک کنید من برای این برنامه 3 ماه وقت گذاشتم.

alizadeh.6725
دوشنبه 19 تیر 1391, 19:14 عصر
اکه بجای کراس تب از کیوری ساده استفاده کنم کی تونم اونها روبا هم ترکیب کنماگه میشه نمئنه زیر برام اصلاح کنید

Abbas Amiri
دوشنبه 19 تیر 1391, 19:14 عصر
شما تقریبا مسئله راحل کردید . مطابق نمونه اصلاح شده خودتان، تمام اطلاعات مشترک جداول را درکوئری UnionAllTables با همان الگو قراردهید " کافیست یک قسمت را کپی کنید و فقط نام جداول را تغییر دهید ضمن اینکه علامت سمی کالن ";" فقط درانتهای کوئری مجازاست "
پس از اینکار در کوئری AllTablesCrossTab به آنچه میخواهید ، خواهیدرسید

alizadeh.6725
دوشنبه 19 تیر 1391, 22:18 عصر
اقای امیری واقعا متشکرم شما لطف بزرگی به ما کردید.فط یه سوال دیگه حالا تو قسمت report من با چع دستوری باید بگم اگر اطلاعات مال 8900 بود تو این خونه بنویس اگر 8901 بود تو این خونه بنویس

Abbas Amiri
سه شنبه 20 تیر 1391, 00:30 صبح
فیلد قیمت از کدام جدول گرفته میشود؟

alizadeh.6725
سه شنبه 20 تیر 1391, 00:50 صبح
از table ابلاغی فیلد نرم هر واحد

alizadeh.6725
سه شنبه 20 تیر 1391, 09:24 صبح
یه سوال دیگه پیش اومد
UNION SELECT [8900].program, [8900].karmand, [8900].mah
FROM 8900;
دستور بالا از فیلد tabl انتخاب می کنه اگه بخوام از فیلدهای query را انتخاب کنم چیکار کنم.؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟/

Abbas Amiri
سه شنبه 20 تیر 1391, 19:42 عصر
تغییرات مورد نظر اعمال شد بقیه اش هم باخودتان

alizadeh.6725
سه شنبه 20 تیر 1391, 20:34 عصر
:خجالت:اقای امیری فقط یه سوالم بیی جواب مونده همه به کمک شما حل شد.سوال اینه نمیشه برای فیش حقوقی قالب ثابتی رو طراحی کرد که برای همه افراد ثابت بشه حالا مثلاً کارمندی که برنامه 8900 نداره به چاش صفر بزاره نمی دونم منظورم متوجه شدید یا نه ؟؟؟؟؟ در واقع در فیش حقوقی نو خونه برنامه 8900 دستور بنویسیم
اگر program=8900 اینجا بنویس تگر نبود صفر بزار جاش؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ اگر این دستور برام توضیح بدی دعات می کن.اگه ندی هم که بازم دعات می کنم چون خیلی بزرگواری کردین تا اینجا:خجالت:

Abbas Amiri
سه شنبه 20 تیر 1391, 21:24 عصر
کدهای زیر را دریک کوئری کپی کنید و ازآن گزارش بسازید


TRANSFORM First(AllTablesCrossTab.[Total Of program]) AS [FirstOfTotal Of program]
SELECT ابلاغي.bodga, [bodga]*[Total Of program] AS Total, مجريان.name
FROM (ابلاغي INNER JOIN AllTablesCrossTab ON ابلاغي.program = AllTablesCrossTab.program) INNER JOIN مجريان ON AllTablesCrossTab.karmand = مجريان.id
GROUP BY ابلاغي.bodga, [bodga]*[Total Of program], مجريان.name
PIVOT AllTablesCrossTab.program;


برای صفرگذاشتن جای خالی درگزارش میتوان عمل کرد