PDA

View Full Version : جمع دو ستون در دو جدول join شده



mohamadlvs
شنبه 24 تیر 1391, 17:42 عصر
سلام برای جمع کردن این دو ستون باید چکار کرد؟ این رو نوشتم ولی ستون AllPrice درست جواب نمیده
هر دو جدول با اتصالات و مقادیرشان را گذاشتم و همچنین نتیجه اجرا دستور

mohamadlvs
شنبه 24 تیر 1391, 21:56 عصر
یه کم توضیح : دو تا جدول که دیاگرام اونا رو گذاشتم و داده های اونا رو هم همچنین، و این که من می خوام ستون های Allprice از جدول HeaderSale و Weight از جدول DeatilSale جداگانه هر کدام در یک ستون جمع بشوند؟ راه حل ؟
پاسخ بدید دیگه.....

Reza_Yarahmadi
شنبه 24 تیر 1391, 21:57 عصر
یکسری از مقادیر جداولتون نشون داده نشده. مشکل توی دستور JOIN شماست ، شما توی جدول Header یک سطر دارید که ممکنه توی Detail چند سطر به ازاش باشه وقتی Join اجرا میشه به ازا هر سطر در Detail یکبار مقدار AllPrice توی Sum شرکت میکنه. به مثال زیر توجه کنید
Declare @HeaderSales Table (SaleID int, CustomerID int, SaleDate varchar(10), AllPrice int)
Declare @DetailSales Table (SalesID int, ProductID int, Quantity int, Weight float)

Insert Into @HeaderSales Values(2, 10, '1391/04/21', 1000)
Insert Into @DetailSales Values(2, 26, 3, 5)
Insert Into @DetailSales Values(2, 30, 1, 5)
Insert Into @DetailSales Values(2, 30, 1, 10)

Select * From @HeaderSales
Select * From @DetailSales

Select SUM(HS.AllPrice) Price, SUM(DS.Weight) Vazn
From
@HeaderSales HS INNER JOIN @DetailSales DS
ON
HS.SaleID = DS.SalesID
در صورتیکه دقیقا بگید چه چیزی میخواید بهتر میشه کمکتون کرد.

mohamadlvs
شنبه 24 تیر 1391, 22:08 عصر
دقیقن مشکل من هم همینه، اون بقیه مقادیر صفر بودن واسه همین نمایششون ندارم . حالا واسه این که این دوتا ستون درست جمع بشن باید چکار کرد آیا باید از هر کدام از جداول جداگانه کوئری بگیرم؟ لطفن راهنمایی کنید

Reza_Yarahmadi
شنبه 24 تیر 1391, 23:21 عصر
;;With DT_Temp as
(
Select SalesID, Sum(Weight) as Weight
From @DetailSales
Group By SalesID
)
Select SUM(HS.AllPrice) Price, SUM(DS.Weight) Vazn
From
@HeaderSales HS INNER JOIN DT_Temp DS
ON
HS.SaleID = DS.SalesID

Mahmoud.Afrad
شنبه 24 تیر 1391, 23:57 عصر
کوئری مشکلی نداره من با همین داده ها مقدار 2000 رو برای price خروجی گرفتم. از اونجایی که ستون مشترک saleID هست توی عکس فقط سطرهایی که saleID 2 و 3 دارند در join هستند که احتمالا سطری که saleID برابر 3 هست چندبار اومده. تصویرداده های detailSales رو کامل بذارید.

مرتضی تقدمی
یک شنبه 25 تیر 1391, 00:51 صبح
سلام

اگه شما مجموع ستون های allprice و weight رو برای هر نفر می خواین بدست بیارین, مجبورید که از group by استفاده کنید. کوئری زیر رو ببینید:



SELECT detailsales.saleid, sum(detailsales.weight + headersales.allprice) AS a
FROM detailsales INNER JOIN
headersales ON detailsales.saleid = headersales.saleid
GROUP BY detailsales.saleid


موفق باشید

mohamadlvs
یک شنبه 25 تیر 1391, 01:33 صبح
گه شما مجموع ستون های allprice و weight رو برای هر نفر می خواین بدست بیارین, مجبورید که از group by استفاده کنید. کوئری زیر رو ببینید:
من نمی خوام دو ستون رو با هم جمع کنم ، مقادیر هر ستون با خودش جمع می شود. به کار بردم این شد


Reza_Yarahmadi جواب نداد شاید من اشتباه نوشتم؟


کوئری مشکلی نداره من با همین داده ها مقدار 2000 رو برای price خروجی گرفتم. ... مقادیر را کامل قرار دادم

تنها موردی که درست جواب میده استفاده از Union است . ولی این دستور باعث میشه مقادیر جواب زیر هم (سطری) بیافتد که چون می خوام مقایر رو در دیتا گرید نشان بدم خیلی ناجور میشه .

FastCode
یک شنبه 25 تیر 1391, 01:51 صبح
Select (Select Sum(HeaderSales.AllPrice) from HeaderSales) As A , (Select Sum(DetailSales.Weight) from DetailSales) as B

Mahmoud.Afrad
یک شنبه 25 تیر 1391, 02:25 صبح
خوب وقتی شما میای از join استفاده میکنی در نتیجه سطرهایی از دو جدول که saleID شون برابر باشه سلکت شده و مجموع ستونهای مورد نظر بدست بیاد. برای اینکه متوجه بشی مجموع برای چه سطرهایی انجام میشه از این کوئری استفاده کن تا متوجه بشی که لزومی نداره همه سطرها حضور داشته باشند
SELECT *
FROM dbo.DetailSales INNER JOIN dbo.HeaderSales
ON dbo.DetailSales.salesID = dbo.HeaderSales.saleID
پس این کوئری برای حالت join هیچ مشکلی نداره(زمانی که برابر بودن saleID در دو جدول مطرح باشه join میکنیم)


اگر به طور کلی مجموع دو ستون از دو جدول رو میخوای اصلا نیازی به join نیست. خیلی راحت این کار رو میتونی انجام بدی به این صورت
select (select SUM(DetailSales.weight) as Vazn from DetailSales)
,(select SUM(HeaderSales.allPrice)as Price from HeaderSales)