ورود

View Full Version : یه دستور select ویژه



rezaei manesh
چهارشنبه 02 شهریور 1384, 08:45 صبح
سلام
من سه فیلد با نام dateok و numReq و KeyReq دارم حالا می خوام رکورد ها رو بر اساس تاریخ گروه بندی کنم و تعداد numReq برای مقادیر 1 تا 3 key req رو داشته باشم
یعنی خروجه من می خوام یک فیلد تاریخ و یک فیلد num 1 که مقدارش کلیدش 1 و یک فیلد دیگه که کلیدش 2 و یکی دیگه که کلیدش 3 هست داشته باشم می خوام تو کریستال رپورت ازش استفاده کنم
من برای هر کلید یک دیتا سط درست کردم و اونا رو تو گزارش بردم اما نمی شه اونا رو به هم ارتباط داد فید مشترک ندارن؟
یکی کمک کنه
این یه مثال ساده از برنامم هست .

AminSobati
چهارشنبه 02 شهریور 1384, 22:41 عصر
دوست عزیزم اگر ممکنه چند رکورد به عنوان نمونه پست کنین. لغت "ارتباط" رو متوجه نشدم، چند تا جدول در این Query شرکت دارند؟

rezaei manesh
پنج شنبه 03 شهریور 1384, 13:24 عصر
سلام
منظور از ارتباط یعنی من 3 جدول درست کردم و اونا رو به کریستال بردم حالا هیچ فیلدی نمی تونم پیدا کنم که در همه یکی باشه.
من این رو تو دو گزارش می خوام که یکی توی یه جدول هست و یکی توی 4 تا -شما اگه همین 1 جدول رو بگین من خودم اون یکی رو درست می کنم
اما چند رکورد
رو اینجا میزارم
جدول اولی جدول اصلی هستش و جدول پایینی فرمتی که من برای گزارش می خوام؟
لطفا کمک کنید

PalizeSoftware
پنج شنبه 03 شهریور 1384, 14:02 عصر
سلام
دوست عزیز برای اینکار باید با استفاده از فرمولها در کریستال به هدف خود برسید. من مثال مربوطه را برای دانلود اینجا گذاشتم. بعد از باز کردن گزارش، مسیر بانک الحاقی رو دوباره به اون معرفی کنید.
در گزارش یک فرمول به نام Init_Var معرفی شده که هدف اون معرفی سه متغیر بصورت سراسری است با مقدار اولیه صفر. اون رو باید در قسمت Group Header قرار داد تا در ابتدا مقدار متغیرها صفر شود.
فرمول دیگری با نام NumReq_Calculate هست که کارش شمارش داده‌ها در گروه مربوطه هست. و سرانجام حاصل این فرمول سه متغیر با تعداد شمارش شده است که با سه فرمول NumReq1 و ... در بخش Group_Footer نمایش داده می‌شود.
اگه سوالی بود بفرمائید.

AminSobati
پنج شنبه 03 شهریور 1384, 18:00 عصر
دوست عزیزم،
من با کریستال زیاد کار نکردم، اما این راه حلش در TSQL:

CREATE TABLE T1 (
DateOK varchar(10),
NumReq tinyint)
GO

INSERT T1 VALUES(1384,1)
INSERT T1 VALUES(1383,1)
INSERT T1 VALUES(1384,3)
INSERT T1 VALUES(1380,3)
INSERT T1 VALUES(1383,1)
INSERT T1 VALUES(1380,3)
INSERT T1 VALUES(1380,1)
INSERT T1 VALUES(1383,3)
GO

SELECT
DateOK,
(SELECT COUNT(*) FROM T1 WHERE NumReq=1 AND DateOk=T.DateOK) AS 'NumReq1',
(SELECT COUNT(*) FROM T1 WHERE NumReq=2 AND DateOk=T.DateOK) AS 'NumReq2',
(SELECT COUNT(*) FROM T1 WHERE NumReq=3 AND DateOk=T.DateOK) AS 'NumReq3'
FROM (SELECT DISTINCT DateOk FROM T1) T

rezaei manesh
شنبه 05 شهریور 1384, 09:27 صبح
سلام
با تشکر فراوان از هر دو شما من از روش کریستال استفاده کردم با کمی تغییر مشکل من در گزارش اول حل شد حالا می خوام برم سراغ گزارش دوم فکرکنم بتونم با این روش اون رو هم درست کنم

rezaei manesh
شنبه 05 شهریور 1384, 19:41 عصر
سلام
من در گزارش بعدیم از 4 جدول استفاده می کنم که هیچ لینکی برای ارتباط ندارند
من یک جدول اصلی دارم که شهر و تاریخ در ان وجود داره اما این شهر و تاریخ رو برای 3 جدول دیگر هم گذاشتم حالا برای هر جدول یک فیلد داریم که تکراری نیست من همون رو گروپ کردم و در هدرش یه متغیر برای شمارش تعداد گذاشتم اما رکورد ها ضرب دکارتی میشن با انکه در هر گروپ فقط یه جدول استفاده شده؟!
با دی تل هم نتونستم؟!!!!!!!!!!!!!!!!!!!!!!!!!

PalizeSoftware
شنبه 05 شهریور 1384, 20:54 عصر
دوست عزیز طراحی بانک شما اشکال داره. شما باید جدولی تشکیل بدید که حداقل حاوی کدشهر و نام شهر باشه و در جداول دیگه فقط از کد شهر استفاده کنید نه اینکه نام شهر و ... رو تکرار کنید. اینجوری بانک شما نرمال نیست و افزونگی بیش از حد هم داره. تازه برای تغییر نام یک شهر مجبورید همه جداول رو هم اصلاح کنید.
در Detail باید ارتباطی بین گزارش اصلی و گزارش جزئی وجود داشته باشد (حداقل توسط یک کلید خارجی)
پیشنهاد می‌کنم ساختار جداول رو حتما حتما اصلاح کنید تا برنامه شما ضعیف ساخته نشه.
موفق باشید

rezaei manesh
یک شنبه 06 شهریور 1384, 08:04 صبح
سلام
مثل اینکه شما منظور من رو خوب نفهمیدید.من هم از روش کدینگ استفاده می کنم این چهار جدول به صورت فیزیکی به این شکل وجود ندارند من آنها رو برای استفاده در گزارشم در ایکس ام ال به این شکل در آوردم که در هر صورت باز اصلا روش خوبی نیست به خاطر همین می خوا م اطلاعات این جدول ها رو با هم یونیون کنم و یه فیلد کد اضافه کنم و یه دیتا ثت به گزارش ببرم ؟
فکر کنم اینطوری بهتر باشه نظر شما چیه؟