PDA

View Full Version : سوال: جست و جو در Sql



uservb
چهارشنبه 04 مرداد 1391, 21:51 عصر
1-فرض کنید ما یه جدول حضور داریم . من میخوام اسم 5 نفری که بیشترین حضور و کمترین حضور رو دارند رو به دست بیارم . حالا میتوشه اونا رو توی دیتا گرید ریخت.
2-و همین طور وقتی کد فردی نوشتم و روی یه دکمه کلیک کردم بگه که آخرین حضور اون فرد کی بوده . (فرض کنید یه فیلد تاریخ هرکدوم از سطر ها دارند)
3- فرض کنید که توی این جدول تاریخ هم وجود داره من میخوام روزی که بیشترین حضور توش هست رو به دست بیارم.
ممنون .

ali_habibi1384
چهارشنبه 04 مرداد 1391, 22:07 عصر
1- با استفاده از order by و جلوش نام ستون در سلكتت مرتبشون كن
2-اين مورد هم با همو دستور Order By و فقط كافيه سلكتت رو اينجوري بنويسي: select top 1 fieldname from tblname order by fieldname
3-روزي كه بيشترين حضور از يك كارمنده يا همه كارمندا؟

uservb
پنج شنبه 05 مرداد 1391, 13:19 عصر
همه ی کارمندان.

Arash_janusV3
پنج شنبه 05 مرداد 1391, 13:42 عصر
مشخصات و فیلدهای جدولتون رو بگید ابتدا باید فهمید که چه داده هایی در جدول وجود داره

ali_habibi1384
پنج شنبه 05 مرداد 1391, 14:27 عصر
اگر ميخوايد سريع به نتيجه برسيد جدولهاي مرتبط به موضوع رو با كليدها و ارتباطاش اينجا بذاريد

uservb
پنج شنبه 05 مرداد 1391, 23:34 عصر
سلام
راستش من یکم توضیح داده بودم ولی پستم حذف شد و دلیلشم نوشت که مختصر و کوتاه نبوده.منم واسه همین توضیحش رو کم
کردم.
1- ما یه جدول حضور داریم که 4 تا فیلد داره : codehozor,tarikh,saat,codekarmand
توی این جدول کارمندها میان و حضورششون رو اعلام می کنند. و ثبت می کنند.
من میخوام توی این جول کد 5 کارمندی رو بیشترین حضور رو داشتند رو به دست بیارم.
مثلا:
select max(codekarmand) from Table_Hozor
که توی این روش فقط کد یه کارمند که بیشترین حضور رو داشته رو میده. من میخوام نفر دوم سوم چهارم و پنجم رو هم به دست بیارم.
نه اینکه فقط نفر اول از نظر بیشترین حضور رو پیدا کنم.
2- و یه مورد دیگه که تو این جدول همون طور که میبینید یه فیلد تاریخ هم هست. من میخوام وقتی که کد یه کارمند رو وارد میکنم توی
جدول حضور که بهتون گفتم در فیلد تاریخ این کارمند بگرده و تاریخ آخرین حضورش رو بده.
مثلا کارمندی که کد کارمندی اون 4 هست . 4 تاریخ براش توی این جدول حضورش ثبت شده . میخوام وقتی که عدد 4 رو وارد می کنم از
بین اون 4 تا تاریخ تاریخ آخری و جدید تر رو برگردونه.
3- درمورد سوال سوم هم اینکه همون طور که گفتم یه فیلد تاریخ توی این جدول وجود داره. می میخوام که همه ی این تاریخ ها رو چک
کنه و ببینه که کدوم تاریخ بیشتر از همه تکرار شده.(به عبارتی در کدام تاریخ بیشترین حضور زده شده)
امیدوترم که تونسته باشم منظورم رو برسونم.
ممنون بابت توجهتون.

ali_habibi1384
جمعه 06 مرداد 1391, 00:47 صبح
شما بايد بجاي table_hozor يه سلكت بنويسي توش جمع حضور همه كارمندا هستش و بجاي ماكس همونطور كه گفتم از order by استفاده كني مثلا چنين چيزي:


select * from (select sum (hozor) as hozor from table hozor) order by hozor

uservb
جمعه 06 مرداد 1391, 17:58 عصر
select * from (select sum (hozor) as hozor from table hozor) order by hozor
فیلد های جدول همون طور که گفتم: codehozor,tarikh,saat,codekarmand
منظور از (hozor) چیه ؟ همون codehozor هست؟
متوجه منظورتون نشدم از : يه سلكت بنويسي توش جمع حضور همه كارمندا هستش .
چه جوری جمع حضور همه ی کارمندا رو به دست بیارم.دقیقا متوجه منظورتون نشدم.
ممنون میشم اگه به اون 2تا سوال دیگه هم پاسخ بدید؟

uservb
دوشنبه 09 مرداد 1391, 11:39 صبح
اگه ما توی جدول Table_Hozor حضور افرادی ثبت شده باشه ولی این افراد هنوز کد حضور ندارند و جلوی فیلد کد حضورشون خالی باشه
اونوقت وقتی دستور زیر رو استفاده می کنیم توی خروجی یه سطر رو هم برای این افراد در نظر میگیره . چه جوری میشه کاری کرد که
دیگه این ها رو هم نشماره و توی خروجی نده .


SELECT TOP(5) [codekarmand], [ItemCount]
FROM
(
SELECT [codekarmand], COUNT(*) AS [ItemCount]
FROM [Table_Hozor]
GROUP BY [codekarmand]
) AS DT
ORDER BY [ItemCount] DESC;

مثلا خروجی به این صورت میشه :


کد کارمند : 3 5 3 4
تعداد : 9 9 8 7 6

همون طور که میبینی برای کد کارمند جای خالی میمونه.
و برای اینکه همین کار رو در بین 2 تاریخ انجام بدیم چه طور هست و یا در یک ماه خاص.
و اینکه من یکم روی کد بالا کار کردم ولی نتونستم کاری کنم که تعداد حضور یه فرد خاص رو به دست بیارم. مثلا تعداد حضور فردی که کد
حضورش 3 هست .
یه مورد دیگه هم اینکه من میخوام میانگین حضور ماهانه رو به دست بیارم . مثلا ما بهش ماه رو میدیم (1391/01) و بعد به دست بیاریم
که توی این ماه به طور میانگین چند حضور در روز زده شده.
و غیبت بیش از 2 روز. کارمندایی که بیش ار 2 روز غیبت دارند(حضوری ثبت نکردند توی جدول Table_Hozor ) رو به دست بیارم.

چه جوری میشه کاری کرد که نتیجه به دست اومده هم بر اساس تاریخ و هم ساعت مرتب بکنه.
یعنی اول بر اساس تاریخ بده و بعد بین اون تاریخ ها نتیجه رو بر اساس ساعت مرتب کنه.

ali_habibi1384
دوشنبه 09 مرداد 1391, 12:09 عصر
ديتا بيست رو Script كن با ديتا هاش بذار اينجا. اگه دوست نداشتي سوالتو توي بخش SQL بپرس