نمایش نتایج 1 تا 20 از 20

نام تاپیک: نمایش آماری چند کوئری در یک دی بی گرید

  1. #1

    نمایش آماری چند کوئری در یک دی بی گرید

    با سلام خدمت دوستان
    من یک کوری دارم که 5 فیلد را به صورت آماری حساب می‌کند و در یک دی بی گرید نمایش می‌دهد
    کد نوشته شده در یک باتون:
    .
    adoQuery1.SQL.Clear;
    adoQuery1.SQL.Add('select count(no) ,count(case when(status=''cancel'') then status else null end ) .... from table1');

    adoQuery1.Open;

    و در یک سطر دی بی گرید نمایش داده می شود.
    حال میخواهم شبیه به کد بالا منتها با شرایط خاص دیگر به باتون اضافه کنم ولی در همان گرید روی فرم در سطر دوم نمایش داده شود. و همین طور ادامه وار ...
    با تشکر از همه دوستان- پیوست جهت اطلاع
    عکس های ضمیمه عکس های ضمیمه

  2. #2
    1)میتونی دستورات بعدی رو هم به این دستور SQLی Union بکنی.

    Select .....
    Union
    Select.....

    2)میتونی یک کلاینت دیتاست رو در حافظه بسازی و هر نتیجه ای رو توی اون اضافه کنی . و گریدت رو هم به اون اون کلاینت دیتاست وصل کنی.

    اینم بگم که معمولا کمنر پیش میاد که لازم بشه آدم از این راه حلها استفاده کنه و اکثرا میشه با زدن یک کوئری درست کل نتیجه مورد نظر رو بدست آورد، مثلا در مورد کاری که تو میخوای بکنی شاید با یک Group by!

  3. #3
    با سلام
    دوست من میشه یک نمونه از کد بالا را با union اصلاح کنید لطفا
    بعدش من میخام که مراحل بعدی در سطر دوم گرید نمایش داده شود و همینطور ادامه دار...

    با تشکر از شما

  4. #4
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    دوست عزیز
    روشی که در بالا دوست دیگرمان گفت درست بود ولی اشکالی که دارد به ترتیب نمایش نمی دهد این با همان روش را به صورت Union All استفاده کن.
    من این کار را کردم و جواب داد.

  5. #5
    با سلام
    دوست من اگه لطف کنید روشی که شما رفتید و جواب گرفتید را کدشا بزارین ممنون میشم
    با تشکر
    داود

  6. #6

    adoQuery1.SQL.Clear;
    adoQuery1.SQL.Add('select count(no) ,count(case when(status=''cancel'') then status else
    null end ) .... from table1');

    adoQuery.SQL.Add('Union all');

    adoQuery1.SQL.Add('select count(no) ,count(case when(status=''cancel'') then status else null end ) .... from table1 where ...');

    adoQuery1.Open;
    You never know what you can do until you try

  7. #7
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با استفاده از روش زیر می توانید این کار را انجام دهید :
    Select Test_Field From Tbl_Test
    Union All
    Select Test_Field From Tbl_Test
    البته دو Select بالا نمایشی می باشد و فقط دستور مشخص شده بالا مهم است.

  8. #8
    کاربر دائمی آواتار cybercoder
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    root/
    پست
    2,018
    استفاده از روش زیر می توانید این کار را انجام دهید :
    Select Test_Field From Tbl_Test
    Union All
    Select Test_Field From Tbl_Test
    البته دو Select بالا نمایشی می باشد و فقط دستور مشخص شده بالا مهم است.
    فقط اشکالش اینه که دیگه نمی تونی Order کنی با Sql

  9. #9
    نقل قول نوشته شده توسط vahidAM مشاهده تاپیک
    فقط اشکالش اینه که دیگه نمی تونی Order کنی با Sql
    مرتب کردنش مشکلی نداره

    پ . ن: من نمی دونم جوابها تکراری نباشه نمیشه؟
    You never know what you can do until you try

  10. #10
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    دوست عزیز
    1-اگر اطلاعات شما از یک Table باشد و بخواهید مرتب کنید پس چرا Union می کنید.
    2-اگر اطلاعات شما از دو یا بیشتر table باشد می توانید Union ها را در یک View انجام دهید و سپس Order را بر روی View انجام دهید.
    ------------------------------------------------
    رفتیم که رفتیم.

  11. #11
    کلا مرتب سازی مشکلی ندارد و اینطورها که پیچیده اش می کنید نیست
    1-اگر اطلاعات شما از یک Table باشد و بخواهید مرتب کنید پس چرا Union می کنید.
    صورت سوال رو یک بار دیگه بخونید


    توجه
    از موضوع بحث خارج نشید
    You never know what you can do until you try

  12. #12
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    شرمنده از اینکه دقت نکردم به پاسخ شما.

    با از پوزش مجدد.
    ---------------------------

    با سلام
    شما زمانی که اطلاعاتان در یک Table قرار دارد و می خواهید این اطلاعات را با یک نظم خواصی نمایش دهید از Union استفاده می کنید واگر بخواهید کل Query را مرتب کنید این نظم به هم می خورد.
    به هر حال شاید من نتوانستم منظور خود را در کلمات بگنجانم.
    با از پوزش مجدد.
    آخرین ویرایش به وسیله mzjahromi : سه شنبه 07 فروردین 1386 در 19:46 عصر

  13. #13
    با سلام
    باتشکر از جواب آقای ذواقدر و بقیه دوستان
    مشکل حل شد اما وقتی که برای هر قسمت از کوئری‌ها که میخواهم در یک سطر گرید نمایش داده شود از دستور شرطی where استفاده میشود خطا میدهد مانند کد زیر:
    adoQuery1.SQL.Clear;
    adoQuery1.SQL.Add('select count(no) ,count(case when(status=''cancel'') then status else null end )from tabel1');
    adoQuery1.SQL.Add('WHERE date_ss BETWEEN :Date1 AND :Date2'+ ' and '+ ' unit like '+QuotedStr('%'+ComboBox1.text+'%'));

    adoQuery1.SQL.Add('Union all');

    adoQuery1.SQL.Add('select count(no) ,count(case when(status=''cancel'') then status else null end )from table1');
    در اینجا اگر از شرط ((ور)) استفاده شود خطا میدهد.

    با تشکر از همه عزیزان
    د راصل این کوئری یک سری آز آیتمها را میخواد با یک شرط آمار بیگره و همون آیتمها را با یک شرط دیگه و ... و نتیجه در یک گرید نمایش داده شود
    آخرین ویرایش به وسیله davoodmz : چهارشنبه 08 فروردین 1386 در 10:16 صبح دلیل: اصلاحیه کد

  14. #14
    متن خطا رو بنویسید و کد اصلی و کامل رو
    خطا ربطی به Union نداره
    You never know what you can do until you try

  15. #15
    با سلام
    متن خطا به پیوست می‌باشد
    توضیح: یک where برای قسمت اول کوئری دارم که بین دو تا تاریخ را و ... می‌باشد و وقتی که where دوم را برای قسمت دوم کوئری مینویسیم که آن هم بین دو تا تاریخ و ...می‌باشد خطا رخ میدهد
    کد:
    adoQuery40.SQL.Clear;
    adoQuery40.SQL.Add('select count(no) ,count(case when(status=''cancel'') then status else null end )from table1');
    adoQuery40.SQL.Add('WHERE date_ss BETWEEN :Date1 AND :Date2'+ ' and '+ ' unit like '+QuotedStr('%'+ComboBox1.text+'%'));
    adoQuery40.Parameters.ParamByName('Date1').Value:= shdatetostr(exShDatePicker1.Date);
    adoQuery40.Parameters.ParamByName('Date2').Value:= shdatetostr(exShDatePicker2.Date);

    adoQuery40.SQL.Add('Union all');

    adoQuery40.SQL.Add('select count(no) ,count(case when(status=''cancel'') then status else null end )from table1');
    adoQuery40.SQL.Add('WHERE date_ss BETWEEN :Date1 AND :Date2'+'unit like '+QuotedStr('%'+ComboBox1.text+'%')+' and '+ ' amaliat like '+QuotedStr('mec'));
    adoQuery40.Open;

    با تشکر
    عکس های ضمیمه عکس های ضمیمه

  16. #16
    پیغام داره روی پارامتر ها اشکال می گیره.
    فکر کنم اگه مقدار دهی به پارامتر هاتون رو ببرین آخر درست می شه.

  17. #17

    adoQuery40.SQL.Add('WHERE date_ss BETWEEN :Date1 AND :Date2'+'unit like '+QuotedStr .....

    Andش کو ؟ چرا فاصله نداره ؟

  18. #18
    با سلام
    با تشکر از توجه خاص جناب آقای کوشا ، در کپی and جا افتاده بود . بازهم خطا مشهود می‌باشد
    البته وقتی از ((ور)) محدوده بین تاریخ را حذف می‌کنیم درست است. آیا روشی دیگر برای اینجا می‌توان بیان کرد که محدوده تاریخ را حساب کند به اضافه شرطهای دیگر...
    با روش پارامتر نمیدونم چرا خطا می‌دهد .
    آخرین کد من:
    adoQuery1.SQL.Clear;
    adoQuery1.SQL.Add('select count(no),count(case when(status=''cancel'') then status else null end),sum(time1),sum(time2),sum(time3)'+
    ',count(case when(doreyi=''ÏÇÑÏ'') then doreyi else null end ),count(case when(status=''cancel'' and doreyi=''ÏÇÑÏ'') then status else null end)'+
    ',sum(case when(time1>0 and doreyi=''ÏÇÑÏ'' ) then time1 else null end)'+
    ',sum(case when(time2>0 and doreyi=''ÏÇÑÏ'' ) then time1 else null end)'+
    ',sum(case when(time3>0 and doreyi=''ÏÇÑÏ'' ) then time1 else null end)'+

    ',count(case when(pm=''ÏÇÑÏ'') then doreyi else null end ),count(case when(status=''cancel'' and pm=''ÏÇÑÏ'') then status else null end)'+
    ',sum(case when(time1>0 and pm=''ÏÇÑÏ'' ) then time1 else null end)'+
    ',sum(case when(time2>0 and pm=''ÏÇÑÏ'' ) then time1 else null end)'+
    ',sum(case when(time3>0 and pm=''ÏÇÑÏ'' ) then time1 else null end)from permit_all');

    adoQuery1.SQL.Add('WHERE unit like '+QuotedStr('%'+ComboBox1.text+'%')+ ' and '+ ' amaliat like '+QuotedStr('mec')+
    ' and ' + 'date_ss BETWEEN :Date1 AND :Date2');
    adoQuery1.Parameters.ParamByName('Date1').Value:= shdatetostr(exShDatePicker1.Date);
    adoQuery1.Parameters.ParamByName('Date2').Value:= shdatetostr(exShDatePicker2.Date);
    adoQuery1.Open;

    adoQuery1.SQL.Add('union all');

    adoQuery1.SQL.Add('select count(no),count(case when(status=''cancel'') then status else null end),sum(time1),sum(time2),sum(time3)'+
    ',count(case when(doreyi=''ÏÇÑÏ'') then doreyi else null end ),count(case when(status=''cancel'' and doreyi=''ÏÇÑÏ'') then status else null end)'+
    ',sum(case when(time1>0 and doreyi=''ÏÇÑÏ'' ) then time1 else null end)'+
    ',sum(case when(time2>0 and doreyi=''ÏÇÑÏ'' ) then time1 else null end)'+
    ',sum(case when(time3>0 and doreyi=''ÏÇÑÏ'' ) then time1 else null end)'+

    ',count(case when(pm=''ÏÇÑÏ'') then doreyi else null end ),count(case when(status=''cancel'' and pm=''ÏÇÑÏ'') then status else null end)'+
    ',sum(case when(time1>0 and pm=''ÏÇÑÏ'' ) then time1 else null end)'+
    ',sum(case when(time2>0 and pm=''ÏÇÑÏ'' ) then time1 else null end)'+
    ',sum(case when(time3>0 and pm=''ÏÇÑÏ'' ) then time1 else null end)from permit_all');
    adoQuery1.SQL.Add('WHERE unit like '+QuotedStr('%'+ComboBox1.text+'%')+ ' and '+ ' amaliat like '+QuotedStr('mec')+
    ' and '+ 'date_ss BETWEEN :Date1 AND :Date2');
    adoQuery1.Parameters.ParamByName('Date1').Value:= shdatetostr(exShDatePicker1.Date);
    adoQuery1.Parameters.ParamByName('Date2').Value:= shdatetostr(exShDatePicker2.Date);

    adoQuery1.Open;

    باتشکر از همه دوستان.
    داود

  19. #19
    این کوئری دوم رو که نوشتی اصلا معلوم نیست چیه
    چرا دو بار کوئری Open شده؟
    با اون اولی خیلی فرق داره.
    در هر حال خطا ربطی به Union نداره ولی
    شما کوئری قطعی رو بذار
    این کوئری اگر واقعا همونی هست که اجرا می کنی ایراداتش اینه که اومدی به دید دو تا کوئری جدا بهش نگاه کردی در حالی که دو تا کوئری در قالب یک کوئری هست
    You never know what you can do until you try

  20. #20
    با سلام
    جناب آقای ذوالقدر عزیز
    حق با شماست با تشکر از شما مشکل حل شد و اشکال کار در این بود که برای قسمت اول کوئری از دو پارامتر برای بین تاریخ استفاده شده بود و از همانها برای قسمت دوم و باید نوع پارامترها عوض میشد. یعنی date1 و date2 در کوئری دوم به date3 و date4 تغییر یافت که درست شد
    با تشکز از همه عزیزان

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •