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

نام تاپیک: یک queryکه همه چیز داشته باشد

  1. #1

    یک queryکه همه چیز داشته باشد

    با سلام خدمت دوستان
    چگونه می توانیم یک query بسازیم که کلیه علائم محاسباتی مانند sum, count,aver و ... را باهم داشته باشد مثلاٌ جمع یک فیلد ، تعداد فیلد دیگر و با شرط خاص و ....
    من برای یکی کد زیر را نوشتم ولی وقتی دو تا فیلد را میخواهیم عملیات انجام دهیم نمی آورد به کد زیر نگاهی بندازید لطفاً :

    SELECT COUNT(fildename1) AS Expr1
    FROM dbo.adotable1
    WHERE (fildename1 = 'true')

    ولی وقتی دو تا میشه مثل کد زیر جواب نمیده

    SELECT COUNT(fildename1) AS Expr1, sum(fildename2) AS Expr2
    FROM dbo.adotable1
    WHERE (fildename1 = 'true') AND (fildename2 = 'true')

    لطفاً راهنمایی فرمائید
    باتشکر - داود
    ------------------------------
    لطفا کدهای خود را در تگ کد قرار دهید
    mzjahromi
    آخرین ویرایش به وسیله mzjahromi : دوشنبه 13 آذر 1385 در 06:49 صبح

  2. #2
    Count(*)
    رو امتحان کن

  3. #3
    کوئری شما یه سری مشکلات رو داره
    1- fileldName2 مقدار عددی هست یا منطقی؟ اگر عددی هست پس چرا مقایسه منطقی کردی و اگر هم منطقی هست sum نباید بشه
    2 - اگر منظور شما عملیات جمع برای دو کوئری به صورت جداگانه هست این دستوری که گرفتید چون شروط and شده اند هم برای count و هم برای Sum اعمال میشوند. اگر بخواهید برای count , sum دو شرط جداگانه داشته باشید باید اونا رو تو دو تا کوئری بنویسید
    You never know what you can do until you try

  4. #4
    با سلام آقای جهرمی این یک مثال بود اصل کار این است که من میخواهم روی دو تا از فیلدهام count بگیرم هر کدام با شرط مربوط به خود در یک کوری
    کد مربوطه :

    SELECT COUNT(fildename1) AS Expr1, count(fildename2) AS Expr2
    FROM dbo.adotable1
    WHERE (fildename1 = 'true') AND (fildename2 = 'true')
    یعنی دو تا فیلد را بشمارد آنهایی که مقدار ارزش برابر true دارند باید طبیعتاً دو تا عدد بده مثلا فیلد یک را بده 205 تا و دومی را بده 102 تا

    باتشکر
    داود

  5. #5
    یه راه اینه(البته شاید دوستان راههای ساده تری هم چیشنهاد بدن ولی

    select sum(c1),sum(c2) from
    (
    select count(field1) as c1 , 0 as c2 from tablename
    unionall
    select 0 as c1 , count(field2) as c2 from tablename
    )
    آخرین ویرایش به وسیله mzjahromi : سه شنبه 14 آذر 1385 در 07:37 صبح
    You never know what you can do until you try

  6. #6
    با سلام جهرمی عزیز
    شرطها را کجا بنویسیم و خط دوم برنامه شما دوباره مقدار c1 را صفر میکند ، ما میخواهیم هر دو مقدار را نمایش دهیم
    مثلا دو تا فیلد a1,a2 را count بگیرد هر کدام با شرط خاصی و دو مقدار c1و c2 را نمایش دهد
    باتشکر
    داود

  7. #7

    select count(field1) as c1 , 0 as c2 from tablename where ...

    شرطها را انتهای selectهای میانی بنویسید
    select های میانی هر کدام برای یک ستون هستند درنتیجه صفر بودن همه ستونها بجز یکی از آنها طبیعی است
    سعی کنید کوئری را تحلیل کنید(قبل از استفاده)
    You never know what you can do until you try

  8. #8
    برای SQLServer

    select Count(case when(field1=true) then field1 else null end), sum(case when(field2=true) then field2 else 0).

  9. #9
    با سلام خدمت دوستان
    آقای قابیل لطفاً اگر امکان دارد همین کد را با دلفی بیان نمائید( نوشتن در دلفی) و برای زمانی که عملگر منطقی نباشد و مقایسه ای باشد
    آقای جهرمی عزیز این کد شما را هم دو دلفی نوشتم ولی جواب نگرفتم میشه لطفاً کدتون را توی دلفی بیان نمایئد

    کد نوشته شده من تو دلفی لطفاً کاملش کنید:

    ADOQuery1.SQL.Clear;
    ADOQuery1.sql.Add(' select count(filde1name1),count(fildename2) from tabelname1');
    ADOQuery1.sql.Add('select count(fildename1) as c1 , 0 as c2 from tabelname1');
    ADOQuery1.SQL.Add('WHERE fildename1='text here ');
    ADOQuery1.sql.Add('select 0 as c1 , count(fildename2) as c2 from tabelname1');
    ADOQuery1.SQL.Add('WHERE pm='text here');
    ADOQuery1.Open;

    با تشکر از همه شما عزیزان
    آخرین ویرایش به وسیله mzjahromi : سه شنبه 14 آذر 1385 در 07:31 صبح

  10. #10
    یه چیزی شبیه به این

    ADOQuery1.SQL.Clear;
    ADOQuery1.sql.Add(' select sum(C1),sum(c2) from (');
    ADOQuery1.sql.Add('select count(fildename1) as c1 , 0 as c2 from tabelname1');
    ADOQuery1.SQL.Add('WHERE fildename1='text here ');
    َAdoQuery1.SQL.Add('Union all');
    ADOQuery1.sql.Add('select 0 as c1 , count(fildename2) as c2 from tabelname1');
    ADOQuery1.SQL.Add('WHERE pm='text here');
    AdoQuery1.SQL.Add(')');
    ADOQuery1.Open;

    سعی کنید جوابها را تحلیل کنید در غیر اینصورت با تغییر شرایط نمیتوانید استفاده ای از این کدها ببرید
    You never know what you can do until you try

  11. #11
    نقل قول نوشته شده توسط davoodmz مشاهده تاپیک
    با سلام خدمت دوستان
    آقای قابیل لطفاً اگر امکان دارد همین کد را با دلفی بیان نمائید( نوشتن در دلفی) و برای زمانی که عملگر منطقی نباشد و مقایسه ای باشد
    نقل قول نوشته شده توسط mzjahromi مشاهده تاپیک
    سعی کنید جوابها را تحلیل کنید در غیر اینصورت با تغییر شرایط نمیتوانید استفاده ای از این کدها ببرید
    راستی کدی که نوشته بودم تو case دوم یک End کم داشت.

  12. #12
    با سلام خدمت دوستان
    با راهنمایی دوستان آقای جهرمی و کوشا کدهای زیر نوشته شد و جواب گرفته شد و جهت استفاده بقیه عزیزان :
    ADOQuery1.SQL.Clear;

    ADOQuery1.sql.Add('select count(NO) as c1 ,0 as c2 , 0 AS C3 ,0 as c4 ,0 as c5 from permit_all');
    AdoQuery1.SQL.Add('Union all');

    ADOQuery1.sql.Add('SELECT count(status) as c2 , 0 as c1 ,0 AS C3,0 as c4 , 0 as c5 from permit_all where status like'+QuotedStr('cancel'));
    AdoQuery1.SQL.Add('Union all');

    ADOQuery1.sql.Add('SELECT count(status) as c3 , 0 as c1 ,0 AS C2 , 0 as c4 , 0 as c5 from permit_all where status like'+QuotedStr('open'));
    AdoQuery1.SQL.Add('Union all');


    ADOQuery1.sql.Add('select count(doreyi) as c4 , 0 as c1 ,0 AS C2, 0 as c3 , 0 as c5 from permit_all where doreyi like '+QuotedStr('ÏÇÑÏ'));
    AdoQuery1.SQL.Add('Union all');

    ADOQuery1.sql.Add('SELECT count(pm) as c5 , 0 as c1 ,0 AS C2 , 0 as c3 , 0 as c4 from permit_all where PM like'+QuotedStr('ÏÇÑÏ'));
    اطلاعات هر کدام در یک سطر نوشته شده و بقیه صفر میشوند که البته میتوان صفرها را نیز برداشت ولی آیا راهی وجود دارد که تمام اطلاعات در یک سطر باشد به صورت زیر باشد
    2525 254 858 858 5
    باز هم کمال تشکر را از دوستان دارم.

  13. #13
    شما یک خط از Query رو ننوشتید و الا درست میشد

    ADOQuery1.sql.Add('select sum( c1) ,sum( c2) , sum( C3) ,sum( c4) ,Sum(c5) from (');

    و یک

    AdoQuery1.SQL.Add(') as TBL1')

    در آخر کوئری.
    در ضمن روشی که آقای کوشا گفتن کوئری کوتاه تری رو تولید میکنه. میتونید از اونم استفاده کنید
    You never know what you can do until you try

  14. #14
    با سلام
    با اضافه کردن خط زیر به اول کوئری :
    ADOQuery1.sql.Add('select count( c1) ,count( c2) , count( C3) ,count( c4) ,count(c5) from (');
    و خط زیر به آخر کوری قبل از Open

    AdoQuery1.SQL.Add(') as TBL1');

    کوئری جواب نمیدهد نمیدونم مشکل چیست . لطفاً راهنمایی کنید این کوئری که تا حالا خوب و عالی شده به مرحله پایانی یعنی در یک سطر نشان داده شود .
    کدهای آقای کیشا ، با sql می باشد و در دلفی نوشتن خیلی آسان نیست.شاید خود آقای کوشا بتونه با دلفی بنویسد.
    باتشکر

  15. #15

    Query1.SQL.Text := 'select Count(case when(field1=true) then field1 else null end), sum(case when(field2=true) then field2 else 0 end)';
    Query1.Open;

  16. #16
    کوئری جواب نمیدهد نمیدونم مشکل چیست . لطفاً راهنمایی کنید این کوئری که تا حالا خوب و عالی شده به مرحله پایانی یعنی در یک سطر نشان داده شود .
    جواب نمی دهد به چه معنی است ؟ خطا میدهد یا به جواب دلخواه نمی رسید ؟
    کدهای آقای کیشا ، با sql می باشد و در دلفی نوشتن خیلی آسان نیست.شاید خود آقای کوشا بتونه با دلفی بنویسد.
    برای استفاده از کدهای اس کیو ال در دلفی کارهای زیادی لازم نیست انجام دهید.
    You never know what you can do until you try

  17. #17
    با سلام
    آقای کوشا عزیز این کد را از کجا نوشتید آیا تست کردید - جواب میده
    مثلاً برای دو فیلد A1و A2 از نوع STRING کدش را بنوسید . با شرط A1=دارد , A2=دارد
    یعنی داردهای این دو تا فیلد را بشمارد. کدی که شما نوشتید خیلی کامل نیست.
    آقای جهرمی عزیز : خطا میدهد و اجرا نمیشود. راستی اگر این کوئری به مرحله پایان برسد واقعاً از شما باید کمال تشکر را کرد چونی کوئری آماری خوبی از آب درمیاد
    کوئری به صورت زیر جواب میدهد عکس پیوست
    با تشکر فراوان از شما
    داود
    عکس های ضمیمه عکس های ضمیمه

  18. #18
    صورت جواب رو میدونم.
    شرح خطائی رو که میده بنویسید+ آخرین کوئری که نوشتید.
    این شکلی نمیشه کمکی کرد
    آخرین کوئری که نوشتید رو از توی دلفی Copy Paste کنید اینجا
    You never know what you can do until you try

  19. #19
    با سلام
    من دو خط کدی که اضافه نمود به برنامه یعنی این دو خط :
    ADOQuery1.sql.Add('select count(c1) ,count( c2) , count( C3) ,count( c4) ,count(c5) from (');
    AdoQuery1.SQL.Add(') as TBL1');

    برای همه ستونها یک عدد ثابت میدهد که هیچ ربطی به عملیات ما ندارد یعنی برای همه عدد 5 را نمایش میدهد
    و بدون اضافه کردن این دو کد جواب میدهد و هیچ مشکلی ندارد ولی فقط در یک سطر نیستند مانند ضمیمه تایپیک قبلی
    کل برنامه نوشته شده برای این کوئری:
    ADOQuery1.SQL.Clear;

    ADOQuery1.sql.Add('select count(c1) ,count( c2) , count( C3) ,count( c4) ,count(c5) from (');

    ADOQuery1.sql.Add('select count(NO) as c1 ,0 as c2 , 0 AS C3 ,0 as c4 ,0 as c5 from permit_all');
    AdoQuery1.SQL.Add('Union all');

    ADOQuery1.sql.Add('SELECT count(status) as c2 , 0 as c1 ,0 AS C3,0 as c4 , 0 as c5 from permit_all where status like'+QuotedStr('cancel'));
    AdoQuery1.SQL.Add('Union all');

    ADOQuery1.sql.Add('SELECT count(status) as c3 , 0 as c1 ,0 AS C2 , 0 as c4 , 0 as c5 from permit_all where status like'+QuotedStr('open'));
    AdoQuery1.SQL.Add('Union all');


    ADOQuery1.sql.Add('select count(doreyi) as c4 , 0 as c1 ,0 AS C2, 0 as c3 , 0 as c5 from permit_all where doreyi like '+QuotedStr('ÏÇÑÏ'));
    AdoQuery1.SQL.Add('Union all');

    ADOQuery1.sql.Add('SELECT count(pm) as c5 , 0 as c1 ,0 AS C2 , 0 as c3 , 0 as c4 from permit_all where PM like'+QuotedStr('ÏÇÑÏ'));

    AdoQuery1.SQL.Add(') as TBL1');

    بدون خط دوم و آخر جواب درست است در یک سطر نیست با این دو خط جواب همه 5 میباشد ولی در یک سطر
    با تشکر از همراهی صمیمانه شما عزیزان
    داود

  20. #20
    من باورم نمیشه خودت نمیتونی اینارو عوض کنی !!


    Query1.SQL.Text := 'select Count(case when(A1=''دارد'') then A1 else null end), sum(case when(A2=''دارد'') then A3 else 0 end) from اسم جدولت ';
    Query1.Open;

    برای این نوشتم A3 که Sum فیلد String که مقدارش "دارد - ندارد " هست رو که نمیشه گرفت....

  21. #21
    بدون خط دوم و آخر جواب درست است در یک سطر نیست با این دو خط جواب همه 5 میباشد ولی در یک سطر
    دوست عزیز در خط اول بجای count از sum استفاده کنید.
    همونطور که قبلا هم گفتم سعی کنید منطق کار رو درک کنید
    You never know what you can do until you try

  22. #22
    با سلام خدمت دوستان
    آقای کوشا با تشکر از شما مشکل حل شد ، من شرط دیگر هم داشتم که بعد از دستور شما با where نوشتم و کاملا درست شد و جواب گرفتم. بازهم تشکر صمیمانه از شما

    آقای جهرمی عزیز با تشکر از شما ، مشکل حل شد با کدهای شما دستورات شرطی بیشتری میشه داد بین کدها ، ولی با sum هم من امتحان کردم نتیجه 5 فیلد را در یک فیلد جمع میکند و نمایش میدهد. به این صورت 0 0 0 0 7282 که عدد 7282 مجموع فیلدها می باشد. با این حال مشکل ما حل شد با کمک شما و آقای کوشا . ولی اگر کد شما هم اصلاح شود خیلی عالی میشود.
    بازهم صمیمانه از شما دو بزرگوار تشکر مینمایم
    داود

  23. #23
    کدتون رو اینجوری بنویسید

    ADOQuery1.SQL.Clear;
    ADOQuery1.sql.Add('select sum(c1) ,sum( c2) , sum( C3) ,sum( c4) ,sum(c5) from (');
    ADOQuery1.sql.Add('select count(NO) as c1 ,0 as c2 , 0 AS C3 ,0 as c4 ,0 as c5 from permit_all');
    AdoQuery1.SQL.Add('Union all');
    ADOQuery1.sql.Add('SELECT 0 as c1,count(status) as c2 , ,0 AS C3,0 as c4 , 0 as c5 from permit_all where status like'+QuotedStr('cancel'));
    AdoQuery1.SQL.Add('Union all');
    ADOQuery1.sql.Add('SELECT 0 as c1 ,0 AS C2 ,count(status) as c3 , 0 as c4 , 0 as c5 from permit_all where status like'+QuotedStr('open'));
    AdoQuery1.SQL.Add('Union all');
    ADOQuery1.sql.Add('select 0 as c1 ,0 AS C2, 0 as c3 ,count(doreyi) as c4 , 0 as c5 from permit_all where doreyi like '+QuotedStr('ÏÇÑÏ'));
    AdoQuery1.SQL.Add('Union all');
    ADOQuery1.sql.Add('SELECT 0 as c1 ,0 AS C2 , 0 as c3 , 0 as c4,count(pm) as c5 from permit_all where PM like'+QuotedStr('ÏÇÑÏ'));
    AdoQuery1.SQL.Add(') as TBL1');

    مشکل شما این بود که همه رو تو ستون اول قرار داده بودید و بعد از Union کردن همگی بنام c1 ارائه میشدند و در نتیجه تنها جمع ستون اول ارائه میشد.
    You never know what you can do until you try

  24. #24
    با سلام آقای جهرمی
    البته مشکل من رفع شده است ولی دوست دارم این کد هم به مرحله پایانی برسد لذا تایپیک مجدد خدمت شما زدم
    من منظورم این نیست که اولی را فقط نشان میدهد . همین کد نوشته شده شما که من هم استفاده کردم به این صورت کار میکند که مثلا باید 5 عدد در 5 ستون بدهد مثل
    2 5 8 0 1
    را ولی مجموع این اعداد در ستون اول نمایش داده میشود و بقیه صفر یعنی به این صورت
    0 0 0 0 16
    با تشکر از شما
    داود

  25. #25
    کد را دقیقابه شکلی که من در پست 23 نوشتم بنویسید جواب به هماان صورت دلخواه شما خواهد بود
    You never know what you can do until you try

  26. #26
    اقای جهرمی با سلام
    من هم دقیقا همون کد شما را نوشتم . ولی نشد- دیگه نمیخواهم در این تایپیک مزاحمتون بشم
    ختم تایپیک را اعلام فرمائید. باتشکر از شما و دوستان عزیز
    داود

تاپیک های مشابه

  1. مشکل ایجاد queryمناسب برای رسم نمودار
    نوشته شده توسط mzamani در بخش گزارش سازی با Crystal Report
    پاسخ: 4
    آخرین پست: یک شنبه 26 آذر 1385, 10:03 صبح
  2. بالا بردن performance در queryها
    نوشته شده توسط Elham_gh در بخش SQL Server
    پاسخ: 1
    آخرین پست: پنج شنبه 13 بهمن 1384, 13:55 عصر
  3. چگونه با استفاده از queryمیتوان combobox
    نوشته شده توسط prog_2005 در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: یک شنبه 27 شهریور 1384, 08:35 صبح
  4. یک DataAdapter برای همه Queryها
    نوشته شده توسط روح اله معینی زاده در بخش VB.NET
    پاسخ: 1
    آخرین پست: دوشنبه 02 آذر 1383, 14:01 عصر

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

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