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

نام تاپیک: تولید کوئری بر روی یک فیلد عددی

  1. #1

    تولید کوئری بر روی یک فیلد عددی

    سلام

    چنین کوئری را چطوری تولید کنم؟
    درجدولم یک فیلد عددی X دارم - میخوام با استفاده از مقداری که داخل این فیلد هست کار زیر صورت بگیره
    if (x>=1or  x<=15)
    n1++
    else if (x>=16or x<=30)
    n2++
    else if (x>=31)
    n3++




    1) بر اساس هر سطری این مقادیر (n1 , n2 , n3) چاپ بشه

    و 2) همچنین بر اساس همین کوئری بصورت یک بازه زمانی چطور خواهد بود؟

  2. #2
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: تولید کوئری بر روی یک فیلد عددی

    نقل قول نوشته شده توسط sg.programmer مشاهده تاپیک
    سلام

    چنین کوئری را چطوری تولید کنم؟
    درجدولم یک فیلد عددی X دارم - میخوام با استفاده از مقداری که داخل این فیلد هست کار زیر صورت بگیره
    if (x>=1or  x<=15)
    n1++
    else if (x>=16or x<=30)
    n2++
    else if (x>=31)
    n3++




    1) بر اساس هر سطری این مقادیر (n1 , n2 , n3) چاپ بشه

    و 2) همچنین بر اساس همین کوئری بصورت یک بازه زمانی چطور خواهد بود؟

    وقت بخیر
    اینو تست کنید



    select
    case
    when x>=1 or x<=14 then n1+1
    when x>=16 or x<=30 then n2+1
    when x>=31 then n3+1
    end as n
    from table1
    where table1.date between '2017/01/01' and '2017/02/02'


  3. #3
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: تولید کوئری بر روی یک فیلد عددی

    نقل قول نوشته شده توسط رامین مرادی مشاهده تاپیک
    وقت بخیر
    اینو تست کنید



    select
    case
    when x>=1 or x<=14 then n1+1
    when x>=16 or x<=30 then n2+1
    when x>=31 then n3+1
    end as n
    from table1
    where table1.date between '2017/01/01' and '2017/02/02'

    در ضمن توی شرطتون فک کنم به جای or بهتره از and استفاده کنید. چون عدد x هر چی باشه بقیه شرطها بررسی نمیشه چون همون اول شرط صادق میشه و n1 رو محاسبه میکنه و برمیگردونه.

    نکته: من متوجه نشدم منظورتون از اون n1 ,n2,n3 چی هست .(همشون چاپ بشه یا یکی) بهتر بود جدولتونو هم میزاشتین

  4. #4

    نقل قول: تولید کوئری بر روی یک فیلد عددی

    شرط OR بهتر نیست ؟ چون اگه یکی از شرط ها درست بود نیازی به چک کردن شرط بعدی نخواهد شد.

    جدولم را بزارم گمراه کننده خواهد شد:

    n1,n2,n3 سه متغییر هستند که میخوام سیستم تولید کنه و در خروجی کوئری ظاهر بشن

  5. #5
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: تولید کوئری بر روی یک فیلد عددی

    نقل قول نوشته شده توسط sg.programmer مشاهده تاپیک
    شرط OR بهتر نیست ؟ چون اگه یکی از شرط ها درست بود نیازی به چک کردن شرط بعدی نخواهد شد.

    جدولم را بزارم گمراه کننده خواهد شد:

    n1,n2,n3 سه متغییر هستند که میخوام سیستم تولید کنه و در خروجی کوئری ظاهر بشن

    خب بر فرض مثال x شما برابر بود با 18 خب در این حالت باید شرط دومتون اجرا میشد ولی در عمل شرط اول اجرا میشد. با این شرطی که شما نوشتید بقیه شرطها رو میتونید حذف کنید. چون همیشه اگه x بزرگتر از صفر باشه شرط اول شما صادق میشه و دیگه نمیره شرط های بعدی رو اجرا کنه. در ضمن اگه میخواید هر سه متغییر تو خروجی باشه بگید کد رو اصلاح کنم. بهتره جدول رو هم بزاری.

    اینو ببینید.
    الان x =18 هست
    شروع
    شرط اول : آیا x>=1 هست؟یا x<14 هست ؟ بله پس n1++(خاصیت or اینه که کافیه یکی از شرطها صادق باشه )

  6. #6

    نقل قول: تولید کوئری بر روی یک فیلد عددی

    نقل قول نوشته شده توسط رامین مرادی مشاهده تاپیک
    خب بر فرض مثال x شما برابر بود با 18 خب در این حالت باید شرط دومتون اجرا میشد ولی در عمل شرط اول اجرا میشد. با این شرطی که شما نوشتید بقیه شرطها رو میتونید حذف کنید. چون همیشه اگه x بزرگتر از صفر باشه شرط اول شما صادق میشه و دیگه نمیره شرط های بعدی رو اجرا کنه. در ضمن اگه میخواید هر سه متغییر تو خروجی باشه بگید کد رو اصلاح کنم. بهتره جدول رو هم بزاری.

    اینو ببینید.
    الان x =18 هست
    شروع
    شرط اول : آیا x>=1 هست؟یا x<14 هست ؟ بله پس n1++(خاصیت or اینه که کافیه یکی از شرطها صادق باشه )
    آره حق با شما هست مهندس باید And باشه

    آره میخوام هر سه متغییر در خروجی بیان

  7. #7

    نقل قول: تولید کوئری بر روی یک فیلد عددی

    فیلد های جدولم خیلی زیاد هست و سردرگم کننده هست.
    من دوتا فیلد دارم با نام های RT , Freez و برای هر کدوم میخوام سه متغییر در خروجی بیان با نام های N1,N2,N3 اگه RT بین 1 تا 15 بود یکی به N1 اضاف بشه و اگر بین 16تا 30 بود به N2 یکی اضاف بشه و اگر بیشتر از 31 بود به N3 یکی اضاف بشه و در نهایت به جای RT این سه متغیر در خروجی ظاهر بشن ( اینا عددهای هستن که در RT قرارگرفته و بر اساس اون شرط تصمیم گیری میشه از کدوم نوع پاکت N1..3 نیاز بوده و چه تعداد)

    برای فیلد Freez هم به همین طریق M1 , M2 , M3

  8. #8
    کاربر دائمی آواتار رامین مرادی
    تاریخ عضویت
    اردیبهشت 1389
    محل زندگی
    آذربایجان
    پست
    1,961

    نقل قول: تولید کوئری بر روی یک فیلد عددی

    ببینید آخه متغییر های N شما کجا هستن؟ تو جدول هستن یا به صورت یک متغییر تعریف کردید تو اس کیو ال؟
    من دستورشو میدم فقط نمیدونم این متغییر های n از کجا اومدن



    select
    case
    when x>=1 or x<=14 then n1+1
    ELSE
    n1
    end as n1,
    case
    when x>=16 or x<=30 then n2+1
    ELSE
    n2
    end as n2,
    case
    when x>=31 then n3+1
    ELSE
    n3
    end as n3


    from table1
    where table1.date between '2017/01/01' and '2017/02/02'


  9. #9

    نقل قول: تولید کوئری بر روی یک فیلد عددی

    بازه اعداد را باید با and بیان کنید.
    از تابع count استفاده کنید و شرط شمارش را داخل همین فانکشن بیان کنید
    select
    COUNT(case when x>=1 and x<=14 then x else null end) 'range1',
    COUNT(case when x>=16 and x<=30 then x else null end) 'range2',
    COUNT(case when x>=31 then x else null end) 'range3'
    from [Table_Name]


    اگر هم میخواهید طبق کوئری آقای رامین مرادی انجام بدید بایست تغییراتی بدید تا ببتونید بشمارید
    declare @n1 as int = 0;
    declare @n2 as int = 0;
    declare @n3 as int = 0;

    select
    @n1 = @n1 + (case when x>=1 and x<=14 then 1 else 0 end),
    @n2 = @n2 + (case when x>=16 and x<=30 then 1 else 0 end),
    @n3 = @n3 + (case when x>=31 then 1 else 0 end)
    from [Table_Name]

    select @n1, @n2, @n3
    آخرین ویرایش به وسیله Mahmoud.Afrad : شنبه 25 شهریور 1396 در 18:20 عصر

  10. #10

    نقل قول: تولید کوئری بر روی یک فیلد عددی

    تشکر آقای مرادی
    و تشکر آقای Mahmoud.Afrad خیلی جالب بود:

    این کد چه معنی برای Null داره من صفر که میزارم جواب کلی میده : اگه زحمتی نیست توضیحی برای این کد بدید


    case when x>=1 and x<=14 then x else null end

  11. #11

    نقل قول: تولید کوئری بر روی یک فیلد عددی

    نقل قول نوشته شده توسط sg.programmer مشاهده تاپیک
    تشکر آقای مرادی
    و تشکر آقای Mahmoud.Afrad خیلی جالب بود:

    این کد چه معنی برای Null داره من صفر که میزارم جواب کلی میده : اگه زحمتی نیست توضیحی برای این کد بدید


    case when x>=1 and x<=14 then x else null end
    در تابع count هر چیزی شمارش میشه غیر null. اگر x در بازه بود x را می‌شمارد و اگر نبود null را. البته null (یعنی هیچی) در شمارش تاثیری ندارد. به همین دلیل هر مقداری(حتی صفر) در else باشد در شمارش تاثیر میگذارد و تعداد کلی میده.
    با count نوشتم تا متوجه بشید البته با sum هم میشه نوشت به اینصورت که به ازای هر x اگر در بازه بود، عدد یک و در غیراینصورت صفر را در نظر بگیرد و این مقدارها(صفرها و یکها) را sum کند
    select
    SUM(case when x>=1 and x<=14 then 1 else 0 end) 'range1',
    SUM(case when x>=16 and x<=30 then 1 else 0 end) 'range2',
    SUM(case when x>=31 then 1 else 0 end) 'range3'
    from [Table_Name]

  12. #12

    نقل قول: تولید کوئری بر روی یک فیلد عددی

    جای تشکر داره آقای Mahmoud.Afrad
    خیلی لطف کردید پاسختون جامع بود

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

  1. رسم نتيجه دو کوئري بر روي يک chartarea
    نوشته شده توسط MEGANMEGAN در بخش C#‎‎
    پاسخ: 0
    آخرین پست: چهارشنبه 13 آذر 1392, 09:01 صبح
  2. سوال: یک کوئری بر روی دیتا بیس pubs
    نوشته شده توسط danial82 در بخش SQL Server
    پاسخ: 5
    آخرین پست: دوشنبه 27 دی 1389, 11:34 صبح
  3. محاسبه بر روی یک فیلد
    نوشته شده توسط bardia goharbin در بخش SQL Server
    پاسخ: 1
    آخرین پست: سه شنبه 30 مهر 1387, 22:22 عصر
  4. پاسخ: 3
    آخرین پست: یک شنبه 07 مهر 1387, 03:25 صبح
  5. سوال: کوئری برای درخواست یک فیلد خالی از نوع nvarchar
    نوشته شده توسط heartshunter در بخش SQL Server
    پاسخ: 1
    آخرین پست: یک شنبه 10 شهریور 1387, 19:59 عصر

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

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