ورود

View Full Version : سوال: شرط if



hsn_abieteh
پنج شنبه 18 شهریور 1389, 08:04 صبح
سلام
دوستان یک همچین دستوری دارم...


select jnc,count(*)male,count(*)female from edu1 where jnc=1 or jnc=2 group by jnc


سه ستون هست jnc,male,female

من می خوام وقتی jnc=1 هست،ستون male صفر بشه و ستون female بشه تعداد یک ها

و وقتی jnc=0 هست،ستون male بشه تعداد دو ها و ستون female صفر بشه

http://up.iranblog.com/Files7/063fde5a930f47a7b7a5.JPG

هر کار می کنم نمیدون شرط if رو چطور به کار بگیرم
خواهش می کنم راهنمایی کنید

behrouzlo
پنج شنبه 18 شهریور 1389, 11:37 صبح
فکر کنم باید به شکل زیر باشه :


Select Jnc,Case When Jnc = 1 Then Count(Jnc) Else 0 End As Male,Case When Jnc = 2 Then Count(Jnc) Else 0 End As Female
From edu1
Group By Jnc

MOJTABAATEFEH
پنج شنبه 18 شهریور 1389, 13:19 عصر
سلام
دوستان یک همچین دستوری دارم...


select jnc,count(*)male,count(*)female from edu1 where jnc=1 or jnc=2 group by jnc
سه ستون هست jnc,male,female

من می خوام وقتی jnc=1 هست،ستون male صفر بشه و ستون female بشه تعداد یک ها

و وقتی jnc=0 هست،ستون male بشه تعداد دو ها و ستون female صفر بشه

http://up.iranblog.com/Files7/063fde5a930f47a7b7a5.JPG

هر کار می کنم نمیدون شرط if رو چطور به کار بگیرم
خواهش می کنم راهنمایی کنید

دوست عزیز کد زیر امتحان کنید
SELECT jnc, case jnc WHEN 1 then 0 end as male,case jnc WHEN 1 then (select count(*) from Edu1 where jnc=1) end as famale into #t1 FROM Edu1


select jnc,case jnc WHEN 0 then (select count(*) from Edu1 where jnc=2) end as male,case jnc WHEN 0 then 0 end as famale into #t2 FROM Edu1

select * from #t1 where male is not null

union

select * from #t2 where male is not null

drop table #t1

drop table #t2

hsn_abieteh
جمعه 19 شهریور 1389, 00:07 صبح
فکر کنم باید به شکل زیر باشه :


Select Jnc,Case When Jnc = 1 Then Count(Jnc) Else 0 End As Male,Case When Jnc = 2 Then Count(Jnc) Else 0 End As Female




From edu1



Group By Jnc



مرسی دوست عزیز دقیقا درست کار کرد اون چیزی که می خواستم

فقط یک سوال دیگه
اگر بخوام هر کدوم از اون دو ستون male و female رو جمع بزنه و در دو ستون دیگه نشون بده چطوری باید از دستور sum در این کد استفاده کنم؟
--------------------

دوست عزیز کد زیر امتحان کنید
SELECT jnc, case jnc WHEN 1 then 0 end as male,case jnc WHEN 1 then (select count(*) from Edu1 where jnc=1) end as famale into #t1 FROM Edu1


select jnc,case jnc WHEN 0 then (select count(*) from Edu1 where jnc=2) end as male,case jnc WHEN 0 then 0 end as famale into #t2 FROM Edu1

select * from #t1 where male is not null

union

select * from #t2 where male is not null

drop table #t1

drop table #t2

تشکر دوست عزیز
ولی این طولانیه
اون کدی که بهروز خان گذاشتن بهتر نیست؟

hsn_abieteh
جمعه 19 شهریور 1389, 17:07 عصر
دوستان خواهش می کنم کمک کنید من یکی دو تا سوال دیگه هم دارم:ناراحت:

MOJTABAATEFEH
جمعه 19 شهریور 1389, 23:45 عصر
مرسی دوست عزیز دقیقا درست کار کرد اون چیزی که می خواستم

فقط یک سوال دیگه
اگر بخوام هر کدوم از اون دو ستون male و female رو جمع بزنه و در دو ستون دیگه نشون بده چطوری باید از دستور sum در این کد استفاده کنم؟
--------------------

تشکر دوست عزیز
ولی این طولانیه
اون کدی که بهروز خان گذاشتن بهتر نیست؟

تعداد دو ستون رو با هم جمع بزنه یعنی male+famale؟
روش دوستمون بهروز رو من امتحان کردم به نظرم جواب شما رو نمی داد خب اگر از اون هم جواب گرفتین هر کدوم رو دوست دارید بکار بگیرید


موفق باشید

hsn_abieteh
شنبه 20 شهریور 1389, 00:07 صبح
نه.
من از دستور شما دوستان عزیز اسفاده کردم. یکسری فیلد رو group by کردم و نتیجه شده این عکس

http://up.iranblog.com/Files7/e4b51873b9b24d91842f.JPG

می خوام که اون ستون مرد رو جمع بزنه و ستون زن رو هم جدا جمع بزنه و هر کدوم در یک فیلد دیگه
در آخر باید جمع ستون مرد بشه 7 و زن بشه 2

خدا خیرتون بده که جواب میدید.

hsn_abieteh
یک شنبه 21 شهریور 1389, 15:57 عصر
ماشالا این همه برنمه نویس اینجا هستن. یعنی هیشکی نیست یه کمکی،راهنمایی چیزی کنه تا ما از سد این سوال رد شیم؟

بهزادصادقی
دوشنبه 22 شهریور 1389, 02:41 صبح
لطفا کدی را که جدول توی آن عکس را ایجاد کرده را اینجا درج بنمائید. علاوه بر آن، ساختار جدول خود را نیز درج کنید. علاوه بر آن، یک شکل بکشید یا توی برنامه ای مثل Excel یک جدول مانندی درست کنید که دقیقا نشان می دهد که نتیجه آن query ای که شما دنبالش هستید دقیقا چه شکلی خواهد بود. آیا یک ستون اضافه خواهد شد به شکل قبلی شما؟ آیا یک سطر؟ اگر یک سطر، محتویات هز ستون چه خواهد بود. اگر شما همه اینها را به ما بدهید، من مطمئنم من و دوستان می توانیم کمک کنیم. احتمالا مشکل این است که آنچه شما دقیقا مد نطر دارید برای ما مفهوم واقع نمی شود. من که دقیقا نمی فهمم شما دقیقا می خواهید نتایج query چه باشد.

hsn_abieteh
دوشنبه 22 شهریور 1389, 17:02 عصر
ممنون آقای صادقی عزیز
جدول اصلی که اطلاعات داخلش ثبت میشه اسمش edu1 هست.
من برا اینکه سنگین نشه مقادیر عددی داخلش ثبت می کنم.
مثلا برای فیلد statusteach که مشخص می کنه طرف هیئت علمی هست یا حق التدریس مقدار 0 برای حق التدریس و 1 برای هیئت علمی در جدول درج میشه.
برای اینکه جدول رو ببینید یک بانک به نام t داخل sql درست کردم و جدول t3 که داخل این بانک هست نشان دهنده نحوه ی درج اطلاعات هست. این بانک رو ضمیمه کردم می تونید ببینیدش.
وضعیت استاد=field statusteach
گروه آموزشی =edu_group
نوع همکاری=co_type
مدرک تحصیلی=diploma
مرتبه ی علمی=grade
جنسیت=Jnc

این هم کدی که اون عکسی که قبلا گذاشتم رو بهم میده


begin
with ADOQuery1 do
begin
SQL.Clear;
SQL.Add('select statusteach=case statusteach when 0 then ''حق التدريس'' when 1 then ''هيات علمي'' end,edu_group=case edu_group when 10100 then ''پزشکي'' when 10200 then ''دندانپزشکي'' when 10300 then ''داروسازي'' when 10400 then ''پرستاري و مامائي''');
SQL.Add('when 10500 then ''دامپزشکي'' when 10000 then ''دروس عمومي'' when 10001 then ''دروس علوم پايه و پيش دانشگاهي'' when 10600 then ''علوم آزمايشگاهي'' when 10700 then ''بهداشت'' when 10800 then ''تکنولوژي راديولوژي'' when 10900 then ''فيزيوتراپي''');
SQL.Add('when 11000 then ''تغذيه'' when 11100 then ''پزشکي جامعه گرا'' when 20100 then ''زبان و ادبيات فارسي'' when 20200 then ''زبان و ادبيات عرب'' when 41000 then ''کامپيوتر'' when 30800 then ''آمار'' when 50600 then ''امور زراعي و دامي'' when 40100 then ''برق''');
sql.Add('when 20600 then ''برنامه ريزي علوم تربيتي''when 21300 then ''حسابداري'' when 30100 then ''رياضي'' when 70100 then ''علمي کاربردي'' when 40400 then ''عمران'' when 50300 then ''مهندسي کشاورزي'' when 40800 then ''نساجي'' when 60300 then ''هنر نمايش'' ');
SQL.Add(' when 20400 then''فرهنگ و معارف اسلامي'' end,co_type=case co_type when 1 then ''تمام وقت 44 ساعت به بالا'' when 2 then ''تمام وقت 32 ساعت'' when 3 then ''تمام وقت طرح مشمولين'' when 4 then ''تمام وقت بورسيه'' when 5 then ''نيمه وقت'' when 6 then ''حق التدريس''end,');
SQL.Add('diploma=case diploma when 1 then ''فوق تخصص يا فوق دکتري'' when 2 then ''دکتري تخصصي'' when 3 then ''معادل دکتري'' when 4 then ''دکتراي حرفه اي'' when 5 then ''فوق ليسانس''');
SQL.Add('when 6 then ''معادل فوق ليسانس'' when 7 then ''حوزوي معادل دکترا'' when 8 then ''ليسانس'' when 9 then ''فوق ديپلم'' when ''A'' then ''ديپلم'' when ''B'' then ''تا سوم نظري'' when ''C'' then ''حوزوي معادل فوق ليسانس'' when ''D'' then ''حوزوي معادل ليسانس''');
SQL.Add('when ''E'' then ''حوزوي معادل فوق ديپلم'' when ''F'' then ''حوزوي معادل ديپلم'' when ''G'' then ''معادل ليسانس'' when ''H'' then ''معادل فوق ديپلم'' when ''I'' then ''معادل ديپلم'' when ''K'' then ''تا سوم راهنمايي'' when ''J'' then ''تا ابتدايي'' when ''l'' then ''بي سواد''end,');
SQL.Add('grade=case grade when 1 then''مربي آموزشيار'' when 2 then ''مربي'' when 3 then ''استاديار'' when 4 then ''دانشيار'' when 5 then ''استاد'' when 6 then ''مربي فاقد مرتبه ي علمي''end,');
SQL.Add('Case When Jnc = 1 Then Count(Jnc) Else 0 End As Male,Case When Jnc = 2 Then Count(Jnc) Else 0 End As Female');
SQL.Add('from edu1 where statusteach=''1'' and term=''88-89-2'' group by statusteach,edu_group,co_type,diploma,grade,jnc order by edu_group');
Open;


حالا من می خوام به آخر اون عکس قبلی این دو فیلد اضافه بشه
یکی "تعداد مرد" و فیلد دیگر "تعداد زن" ک به ترتیب فیلد مرد و زن همون عکسی قبلی که گذاشتم رو می شمرن

این هم عکسی از اون چیزی که من می خوام.اون قسمت تعداد مرد و تعداد زن باید به آخر عکس قبلی اضافه بشه

http://up.iranblog.com/Files7/5f6517986b65443e9f5b.JPG

بهزادصادقی
دوشنبه 22 شهریور 1389, 17:08 عصر
مرسی، دست شما درد نکند که این قدر با حوصله و دقت اطلاعات مربوطه را درج نمودید. ایکاش همه دوستانی که سوال داشتند این کار را می کردند.

یک سوال اولیه. ستون تعداد مرد و ستون تعداد زن برای همه سطرها عددشان یکسان است. آیا این تصادقی است یا اینکه همیشه اینطور خواهد بود. یعتی چون جمع تعداد مران در ستون مرد 7 می باشد و در ستون زن 2، شما می خواهید این مقدایر همیشه در آن دو ستون آخری لحاظ شوند؟

hsn_abieteh
دوشنبه 22 شهریور 1389, 18:08 عصر
دست شما درد نکنه که کمک می کنید. انشالا همیشه موفق باشید.

من فقط هدفم فقط این هست که تعداد مرد ها و زن ها رو در دو فیلد جدا قرار بده.
فقط می خوام که مقدار 7 که تعداد مرد هست در یک فیلد جدا و تعداد زن که دو تا هست رو در یک فیلد جدا
قرار بده.
فقط همین شمردن تعداد مرد و تعداد زن و قرار دادن اونها در دو فیلد مجزا برام مهم هست.

MOJTABAATEFEH
دوشنبه 22 شهریور 1389, 18:19 عصر
نه.
من از دستور شما دوستان عزیز اسفاده کردم. یکسری فیلد رو group by کردم و نتیجه شده این عکس

http://up.iranblog.com/Files7/e4b51873b9b24d91842f.JPG

می خوام که اون ستون مرد رو جمع بزنه و ستون زن رو هم جدا جمع بزنه و هر کدوم در یک فیلد دیگه
در آخر باید جمع ستون مرد بشه 7 و زن بشه 2

خدا خیرتون بده که جواب میدید.

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


select count(*) as ManyMale from #table1 where male=1


موفق باشید

بهزادصادقی
دوشنبه 22 شهریور 1389, 18:41 عصر
آیا این آن چیزی است که شما دنبالش هستید:



select
g.*,
t.TotalMales,
t.TotalFemales
from
(
select
statusteach = case statusteach
when 0 then 'حق التدريس'
when 1 then 'هيات علمي' end,
edu_group = case edu_group
when 10100 then 'پزشکي'
when 10200 then 'دندانپزشکي'
when 10300 then 'داروسازي'
when 10400 then 'پرستاري و مامائي'
when 10500 then 'دامپزشکي'
when 10000 then 'دروس عمومي'
when 10001 then 'دروس علوم پايه و پيش دانشگاهي'
when 10600 then 'علوم آزمايشگاهي'
when 10700 then 'بهداشت'
when 10800 then 'تکنولوژي راديولوژي'
when 10900 then 'فيزيوتراپي'
when 11000 then 'تغذيه'
when 11100 then 'پزشکي جامعه گرا'
when 20100 then 'زبان و ادبيات فارسي'
when 20200 then 'زبان و ادبيات عرب'
when 41000 then 'کامپيوتر'
when 30800 then 'آمار'
when 50600 then 'امور زراعي و دامي'
when 40100 then 'برق'
when 20600 then 'برنامه ريزي علوم تربيتي'
when 21300 then 'حسابداري'
when 30100 then 'رياضي'
when 70100 then 'علمي کاربردي'
when 40400 then 'عمران'
when 50300 then 'مهندسي کشاورزي'
when 40800 then 'نساجي'
when 60300 then 'هنر نمايش'
when 20400 then 'فرهنگ و معارف اسلامي' end,
co_type = case co_type
when 1 then 'تمام وقت 44 ساعت به بالا'
when 2 then 'تمام وقت 32 ساعت'
when 3 then 'تمام وقت طرح مشمولين'
when 4 then 'تمام وقت بورسيه'
when 5 then 'نيمه وقت'
when 6 then 'حق التدريس' end,
diploma = case diploma
when 1 then 'فوق تخصص يا فوق دکتري'
when 2 then 'دکتري تخصصي'
when 3 then 'معادل دکتري'
when 4 then 'دکتراي حرفه اي'
when 5 then 'فوق ليسانس'
when 6 then 'معادل فوق ليسانس'
when 7 then 'حوزوي معادل دکترا'
when 8 then 'ليسانس'
when 9 then 'فوق ديپلم'
when 'A' then 'ديپلم'
when 'B' then 'تا سوم نظري'
when 'C' then 'حوزوي معادل فوق ليسانس'
when 'D' then 'حوزوي معادل ليسانس'
when 'E' then 'حوزوي معادل فوق ديپلم'
when 'F' then 'حوزوي معادل ديپلم'
when 'G' then 'معادل ليسانس'
when 'H' then 'معادل فوق ديپلم'
when 'I' then 'معادل ديپلم'
when 'K' then 'تا سوم راهنمايي'
when 'J' then 'تا ابتدايي'
when 'l' then 'بي سواد'end,
grade = case grade
when 1 then'مربي آموزشيار'
when 2 then 'مربي'
when 3 then 'استاديار'
when 4 then 'دانشيار'
when 5 then 'استاد'
when 6 then 'مربي فاقد مرتبه ي علمي' end,
Case When Jnc = 1 Then Count(Jnc) Else 0 End As Male,
Case When Jnc = 2 Then Count(Jnc) Else 0 End As Female
from
dbo.edu1
where
statusteach='1'
and term='88-89-2'
group by
statusteach,
edu_group,
co_type,
diploma,
grade,
jnc
) g
cross join
(
select
(select count(1) from dbo.edu1 e where e.Jnc = 1 ) TotalMales,
(select count(1) from dbo.edu1 e where e.Jnc = 2 ) TotalFemales
) t
order by
edu_group;

hsn_abieteh
دوشنبه 22 شهریور 1389, 18:57 عصر
مرسی،ممنون با هر دو روش به نتیجه رسیدم.
آقا مجتبی دست گلت درد نکنه.

آقای صادقی عزیز باعث زحمت شما شد. وقتتون هم گرفت. نمی دونم چطور تشکر کم. دستتون درد نکنه یک دنیا ممنون

behrouzlo
سه شنبه 23 شهریور 1389, 16:42 عصر
ساده ترین شکلی که می توانید کار را انجام بدهید به شکل زیر :


Declare @MCount Int = (Select Count(Jnc) From edu1 Where Jnc = 1)
Declare @FCount Int = (Select Count(Jnc) From edu1 Where Jnc = 2)


Select Jnc,Case When Jnc = 1 Then Count(Jnc) Else 0 End As Male,Case When Jnc = 2 Then Count(Jnc) Else 0 End As Female,@MCount As MaleCount,@FCount As FemaleCount
From edu1
Group By Jnc