استفاده از sum در 2 جدول مختلف
باسلام و احترام
من 2 بانک اطلاعاتی به نامهای B1 و B2 دارم که می خواهم جمع مقادیر فیلد V در بانک B1 و جمع مقادیر فیلد M در بانک B2 را بدست آورم.
وقتی این جمع را به صورت جدا جدا می نویسم مشکلی نیست و مقادیر درست است ولی وقتی این دو بانک را باهم ترکیب می کنیم مقادیر بانک B1 اشتباه می شود
نتایج اجرای کدهای بالا
اشکال کارم کجاست.
باتشکر
5 پاسخ
دوستان عزیز کسی چیزی به ذهنش نمیرسه؟
پاسخ شما کاملا درسته ولی برام سوال شد که چه ترکیبی از مقادیر فیلدها در این کوئری اضافه شده که جمع بالاتر میره؟
B1.ID = 14 باید مشکل رو حل کرده باشه ولی چرا بقیه کدها رو باز جمع می کنه؟
سلام، وقت بخیر، مشکل به خاطر بخش where هست که شما B1.Id = B2.Id رو نوشتید که تو کوئری های بالا وجود نداره. در حقیقت شما دو جدول B1 و B2 رو با هم Join کردید که در کوئری های بالا اینکار انجام نشده.
باسلام
چون من در واقع می خواهم جمع مقادیر ID=14 محاسبه شود
من اگر کد را هم به صورت زیر تغییر بدهم
select SUM(B1.V) ,SUM(B2.M) from B1, B2 WHERE B1.ID='14' and B2.ID='14' and B1.Vaz=N'True' and B2.Vaz=N'True'
باز هم در محاسبه تغییری ایجاد نمی شود
واگر کد را نیز به صورت گروهی تغییر بدهم
select B1.ID ,SUM(B1.V) ,SUM(B2.M) from B1, B2 WHERE B1.ID=B2.ID and B1.Vaz=N'True' and B2.Vaz=N'True' group by B1.ID
بازهم محاسبه اشتباه می باشد.(نوع داده ی V و M از نوع bigint میباشد)
علت چیست دوستان
با سلام و احترام
با توجه به توضیحات ارایه شده بنظر میرسد فیلد ID در هردو جدول Primary Key نیستند. برای راهنمایی بهتر اطلاعات دقیق تری از ساختار جداول نیز مورد نیاز است. اما کد زیر می تواند مشکل شمارا مرتفع نماید:
select sum (t.a) from (select SUM(B1.V) a from B1 WHERE B1.ID='14' and B1.Vaz=N'True' union all SELECT SUM(B2.M) a from B2 WHERE B2.ID='14' and B2.Vaz=N'True' ) as t