PDA

View Full Version : روش نوشتن تقاضایی برای بدست آوردن تعداد



MOJTABAATEFEH
دوشنبه 25 بهمن 1389, 23:55 عصر
سلام دوستان عزیز من جدولی دارم که در آن افراد با یک سری مشخصاتشون ثبت میشوند حالا می خوام گزارشی بگیرم به صورت زیر :(شهرها کد دارند)
تعداد مردهای هر شهر ، تعداد زن های هر شهر ، مجموع دریافتی افراد هر شهر مانند ضمیمه

Reza_Yarahmadi
سه شنبه 26 بهمن 1389, 08:23 صبح
با استفاده ازGroup By ميتونيد اين كار رو انجام بديد. چيزي شبيه كد زير

Select
CityName,
Sum(case When Gender = 'مرد' then 1 else 0 End) as IsMale,
Sum(case When Gender = 'زن' then 1 else 0 End) as IsFemale,
Sum(Recieved) as TotalRecieved,
Sum(Pay) as TotalPay
From
TableName
group by
CityName

MOJTABAATEFEH
شنبه 30 بهمن 1389, 17:40 عصر
سلام دوست عزیز ممنون بابت پاسختون حالا اگر بخوایم به صورت زیر باشه و اینکه امکان داره یک شهر مانندمثال شهر 3 هیچ موردی در اون وجود نداشته باشه پس باید مثل نمونه صفر گذاشته شود و نه اینکه اصلا ردپایی از این شهر نباشد اگر احتیاج به توضیح بیشتر بود بفرمایید البته این تعداد بالای فلان و ...... را نادیده بگیرید و براساس همون مجموع دریافتی و پرداختی بفرمایید

با تشکر

Reza_Yarahmadi
یک شنبه 01 اسفند 1389, 08:19 صبح
من حدس ميزنم شما از Join چند جدول نتايج بالارو بدست مياريد. در صورت درست بودن حدسم كافيه به جاي Inner Join‌ از Outer Join ها و از تابع ISNULL براي اطمينان استفاده كنيد.

Select
t1.CityName,
Sum(case When ISNULL(t2.Gender, '') = 'مرد' then 1 else 0 End) as IsMale,
Sum(case When ISNULL(t2.Gender, '') = 'زن' then 1 else 0 End) as IsFemale,
Sum(ISNULL(t2.Recieved), '') as TotalRecieved,
Sum(ISNULL(t2.Pay), '') as TotalPay
From
TableName1 t1 Left Outer Join TableName2 t2
group by
t1.CityName
در غيراينصورت ساختار جدولها و دستوري كه مينويسيد رو اينجا بذاريد تا بهتر بشه كمكتون كرد.

MOJTABAATEFEH
یک شنبه 01 اسفند 1389, 12:24 عصر
نه دوست عزیز از یک جدول استفاده میکنم
ساختار هم فکر میکنم از سوالم مشخصه دستور چی رو بنویسم؟ دستور جواب رو که نمیدونم
البته یک کار میشه کرد در صورتی که به حل کمک می کنه تعداد شهرها مشخصه و در یک کمبو قرار داره بیایم این شهرها و کدهای اونها رو در یک جدول دیگه قرار بدیم و موقعی که می خوایم گزارش بالا رو بگیریم بررسی کنیم با NOT IN و اگر موردی از جدول شهرها در جدول مورد نظر ما نبود به جای مقادیرش در گزارش صفر قرار بده لطفا 1فکرم روی این مورد بکنید

با تشکر

Reza_Yarahmadi
یک شنبه 01 اسفند 1389, 12:34 عصر
دستور چی رو بنویسم؟ دستور جواب رو که نمیدونم
يعني با توجه به نمونه كدي كه براتون گذاشتم هيچ دستوري رو تست نكرديد؟ :متفکر:
پس همون دستور اول با اضافه كردن ISNULL بايد كارتون رو راه بندازه.

MOJTABAATEFEH
یک شنبه 01 اسفند 1389, 12:40 عصر
تست کردم یک مشکل توی جمع افقی بود که فکر کنم با یک جدول موقتی و یک فیلد محاسباتی حل میشه مشکل اصلی توی مورد بعدیه یعنی جای شهری که نیست صفر قرار بگیره نه اصلا هیچ اثری ازش نباشه

Reza_Yarahmadi
یک شنبه 01 اسفند 1389, 13:03 عصر
(بازم حدس ميزنم)دوست عزيز بايد توجه داشته باشيد كه فقط نام شهرهايي مياد كه در جدول وجو دارند و در صورتي كه به ازا شهر 3 هيچ ركوردي توي جدول وجود نداشته باشه مسلما حذف ميشه.
در صورتي كه حدسم درست باشه ميتونيد بصورت زير حلش كنيد.

;With City as(
Select N'شهر 1' AS CityName
UNION ALL
Select N'شهر 2' AS CityName
UNION ALL
Select N'شهر 3' AS CityName
UNION ALL
Select N'شهر 4' AS CityName
UNION ALL
Select N'شهر 5' AS CityName
UNION ALL
Select N'شهر 6' AS CityName
)
Select
C.CityName,
Sum(case When ISNULL(t2.Gender, '') = 'مرد' then 1 else 0 End) as IsMale,
Sum(case When ISNULL(t2.Gender, '') = 'زن' then 1 else 0 End) as IsFemale,
Sum(ISNULL(t2.Recieved, 0)) as TotalRecieved,
Sum(ISNULL(t2.Pay, 0)) as TotalPay
From
City C Left Outer Join TableName1 t1
ON
C.CityName = t1.CityName
group by
C.CityName

MOJTABAATEFEH
یک شنبه 01 اسفند 1389, 13:24 عصر
دوست عزیز نظرتون راجع به پست قبلیم چیه که شهرها رو در یک جدول دیگه بزاریم و با NOT IN چک کنیم؟

Reza_Yarahmadi
یک شنبه 01 اسفند 1389, 13:31 عصر
اون پست رو ويرايش كرديد من متن اوليه اونو ديدم.
ميشه شهرها رو توي يك جدول ديگه ريخت و با Joinي كه در دستور بالا نوشتم انجام داد. راه حلي كه خودتون ميگيد يك مقدار قضيه رو ميپيچونه!! نيازي به چك كردن نيست در دستور بالا در صورتي كه سطري وجود نداشته باشه مقدار NULL برميگردونه كه با ISNULL اونو به صفر تغيير ميديد. (اگر به دستور بالا دقت كنيد ابتدا شهرها توي يك جدول مجازي با نام City ريخته ميشه و بعد با جدول اصلي Join ميشه)

MOJTABAATEFEH
یک شنبه 01 اسفند 1389, 21:33 عصر
واقعا ازتون ممنونم بابت وقتی که به سوال من اختصاص دادین براتون آرزوی موفقیت روزافزون دارم درست شد