استفاده از چهار عمل اصلی جمع ، تفریق ، ضرب و تقسیم SQL Server
با سلام و درود خدمت دوستان عزیز
برای من سوالی پیش اومد که آیا می شود در SQL Serve در جستجو مقدار دو حاصل را محاسبه کرد.
مثلا ما 3 جدول داریم که با این صورت است جدول T که دارای فیلدهای cod و Name هست (فیلد cod کلید اصلی) و جدول T1 که دارای فیلدهای cod و Number1 هست و جدول T2 که دارای فیلدهای cod و Number2 هست . حالا می خواهی اطلاعاتی از فردی مثلا با کد 14 را به این صورت جستجو نماییم که در خروجی آن دارای 5 ستون باشد که در آن کد فرد(در اینجا مثلا 14 بود) , نام , حاصل جمع مقادیر فیلد (Number1 ) این فرد , حاصل جمع مقادیر فیلد (Number2 ) فرد , و حاصل تفریق دو ستون قبل
که سوال من در اصل در مورد آخرین ستون بالا می باشد که چگونه حاصل جمع فیلدهای (Number1 و Number2 ) را که بدست آورده ایم از هم کم نماییم حاصل را در یک ستون جدید نمایش دهیم.
بسیار سپاسگذار هستم.
5 پاسخ
البته که روش مهندس احمدی دقیق هست ولی فقط خواستم ببینم میشه روشی متفات تر درست کرد یا خیر.
Select T.Code,T.Name,sum(t1.Number1)as sumnumber1,SUM(T2.Number2)as sumnumber2 from T,T1,T2 WHERE T.Code=T1.Cod and T1.Cod='14' and T2.Code=T1.Cod GROUP By T.Name,T.Code
در این مثال فقط کد 14 مورد بررسی قرار گرفته
برای اینکار باید جداول رو با هم Join کنید بعد از Join کردن، با تابع SUM می تونید جمع مقادیر رو داشته باشید:
select t.Cod,t.Name,SUM(t1.Number1) [Number1],SUM(t2.Number2) [Number2] from T inner join T1 on t.Cod = t1.Cod inner join T2 on t.Cod = t2.Cod group by t.Cod,t.Name
نتیجه رو هم در شکل زیر میبینی:
وقتی دستور را هم به صورت گفته شده می نویسیم با استفاده از inner join حاصل جمع Number1 را دو برابر مقدار واقعی نمایش میدهد.
select
t1.Cod, t1.Name, SUM(t1.Number1) [Number1], SUM(t2.Number2) [Number2], (SUM(t1.Number1)-SUM(t2.Number2)) Result
from T1
inner join T2
on t1.Cod = t2.Cod where t1.Cod ='14'
group by t1.Cod,t1.Name
علت این اشتباه در جمع کردن چیست؟
سلام
اگه دستور را به شکل زیر بنویسیم:
select T.Code ,SUM(T1.Number1),SUM(T2.Number2),(SUM(T1.Number1) - SUM(T2.Number2)) from T,T1,T2 where T.Code=T1.Cod and T1.Cod='14' and T2.Code=T1.Cod GROUP By T.Name,T.Code
حاصل جمع اولی را 2 برابر نمایش می دهد چرا؟
مثلا اگر حاصل جمع مقادیر فیلد Number1 می شود 5 در کد بالا نمایش می دهد 10 علت چیست؟
من یه نکته رو تو سوال شما دقت نکرده بودم که ستون پنجم حاصل تفریق رو نمایش بده. با کد زیر اینکار هم انجام میشه:
select t.Cod, t.Name, SUM(t1.Number1) [Number1], SUM(t2.Number2) [Number2], (SUM(t1.Number1)-SUM(t2.Number2)) Result from T inner join T1 on t.Cod = t1.Cod inner join T2 on t.Cod = t2.Cod group by t.Cod,t.Name