PDA

View Full Version : دستور جستجوی sql



ma.rad
چهارشنبه 26 شهریور 1393, 17:45 عصر
باسلام خدمت دوستان
یه سوالی داشتم به نظر من که سخته ، یه جدول دارم به شکل زیر:


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


8
6
4
5
7
3
شیراز


9
6
1
4
5
5
تهران


5
5
5
4
4
2
قم



حالا میخوام تعداد افراد دیپلمه و زیر دیپلم هر شهر وهمینطور تعداد افراد با مدرک کاردانی به بالای هر شهر رو با یه کوئری به من بده ؟
مثل جدول زیر: لطفا بگید دستور Sql چی می شه؟

کاردانی و بالاتر
دیپلم و زیر دیپلم ها
مدرک
نام شهر


18
15
شیراز


16
14
تهران


15
10
قم

Rejnev
چهارشنبه 26 شهریور 1393, 18:12 عصر
به نظر من که سخت نیست... جای این سوال هم تو تاپیک سی شارپ نیست...

SELECT
name,
ebtedaii+sikl+diplom as [Diplom va zir Diplom],
kardani+karshenasi + fogh as [kardani b bala]
from tbl

ma.rad
چهارشنبه 26 شهریور 1393, 18:23 عصر
هـــــا.....
نکته سختش یادم رفت بگم که جدول من فیلد عدد نداره عزیز به این شکله:


نام
مدرک
سال تولد
تاهل
...
...
نام شهرمحل تولد


علی
دیپلم
1360
1
..
..
شیراز


محمد
کارشناسی
1365
1
..
..
تهران


رضا
سیکل
1370
2
..
..
قم



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

ma.rad
چهارشنبه 26 شهریور 1393, 18:58 عصر
کجایند مردان بی ادعا...

ma.rad
پنج شنبه 27 شهریور 1393, 00:05 صبح
????:متفکر::ناراحت:

alibilgats
پنج شنبه 27 شهریور 1393, 00:32 صبح
سلام دوست عزیز.

SELECT * FROM (
SELECT shahr AS [shahr],result as [result] FROM (
SELECT shahr , madrak,
CASE WHEN madrak = N'ابتدایی' THEN 'P1'
WHEN madrak = N'سیکل' THEN 'P1'
WHEN madrak = N'دیپلم' THEN 'P1'
WHEN madrak = N'فوق دیپلم' THEN 'P2'
WHEN madrak = N'لیسانس' THEN 'P2'
WHEN madrak = N'فوق لیسانس' THEN 'P2'
WHEN madrak = N'دکترا' THEN 'P2'
ELSE 'P0' END AS result
FROM Table1
) AS tmp2
) AS tmp1


PIVOT (
count(result)
FOR [result] IN (p1,p2)
) AS p

ستون p1 یعنی دیپلم و پایین تر
ستون p2 یعنی بالاتر از دیپلم

ولی خداییش مقداری از فسفرهای مغزمو احتمالا از دست دادم!:عصبانی++:
موفق باشی:چشمک:

ma.rad
پنج شنبه 27 شهریور 1393, 14:01 عصر
tmp2 ,tmp1 چی هستن؟ یه توضیح می دی؟

alibilgats
پنج شنبه 27 شهریور 1393, 15:27 عصر
دوست عزیز من کدمو اینطوری اصلاح میکنم :


SELECT * FROM (
SELECT shahr ,
CASE WHEN madrak = N'ابتدایی' THEN 'P1'
WHEN madrak = N'سیکل' THEN 'P1'
WHEN madrak = N'دیپلم' THEN 'P1'
WHEN madrak = N'فوق دیپلم' THEN 'P2'
WHEN madrak = N'لیسانس' THEN 'P2'
WHEN madrak = N'فوق لیسانس' THEN 'P2'
WHEN madrak = N'دکترا' THEN 'P2'
ELSE 'P0' END AS result
FROM Table1
) AS tmp

PIVOT (
count(result)
FOR result IN (p1,p2)
) AS p

ابتدا با توجه به شرایط مورد نظر یک ستون از جدول اصلی استخراج میکنیم با مقادیر p1 و p2 و میریزیم توی tmp
بعدش با دستور PIVOT مقادیر داخل ستون result که از select داخلی گرفتیم رو به ستون های p1 و p2 تبدیل میکنیم. و با استفاده از تابع count تعدادشون رو هم محاسبه میکنیم.
دستور pivot کار تبدیل مقادیر به ستون رو با اعمال گروهبندی و توابع مجموع انجام میده.
البته فرض رو بر این گرفتیم که حالت p0 هیچ وقت اتفاق نمیفته!
موفق باشی

ma.rad
جمعه 04 مهر 1393, 09:30 صبح
یه سوال دیگه
من میخوام جمع کل هرشهرم توی این query بده


جمع کل

کاردانی و بالاتر

دیپلم و زیر دیپلم ها
مدرک
نام شهر


33

18
15
شیراز


30

16
14
تهران


25

15
10
قم