ورود

View Full Version : مشکل در جمع مقادیر یک ستون



araz_pashazadeh
شنبه 21 اردیبهشت 1392, 18:59 عصر
با عرض سلام و خسته نباشید خدمت دوستان
من پرسو جوی به شکل زیر نوشتم :
SELECT DetailOfDelivery.ID, DetailOfDelivery.DeliveryDetId, DetailOfDelivery.CaseTypeId, DetailOfDelivery.CaseCapacity, DetailOfDelivery.CaseName,
DetailOfDelivery.CaseCount, DetailOfDelivery.FruitType, ISNULL(NumberBoxesLoaded.NumberBoxesLoaded, 0) AS NumberBoxesLoaded,
DetailOfDelivery.CaseCount - ISNULL(NumberBoxesLoaded.NumberBoxesLoaded, 0) AS Remaind
FROM (SELECT TB_DetailOfDelivery.ID, TB_DetailOfDelivery.DeliveryDetId, TB_DetailOfDelivery.CaseTypeId, TB_CaseType.CaseCapacity, TB_CaseType.CaseName,
TB_DetailOfDelivery.CaseCount, TB_DetailOfDelivery.FruitType
FROM TB_DetailOfDelivery INNER JOIN
TB_CaseType ON TB_DetailOfDelivery.CaseTypeId = TB_CaseType.ID INNER JOIN
TB_DeliveryDet ON TB_DetailOfDelivery.DeliveryDetId = TB_DeliveryDet.ID INNER JOIN
TB_Customer ON TB_DeliveryDet.CustomerId = TB_Customer.ID
WHERE (TB_DeliveryDet.CustomerId = @CustomerId)) AS DetailOfDelivery LEFT OUTER JOIN
(SELECT TB_DetailOfDelivery.ID, ISNULL(SUM(TB_CaseType.CaseCountPerPal), 0) AS NumberBoxesLoaded
FROM TB_Palette INNER JOIN
TB_DetailOfDelivery ON TB_Palette.DetailOfDeliveryId = TB_DetailOfDelivery.ID INNER JOIN
TB_CaseType ON TB_DetailOfDelivery.CaseTypeId = TB_CaseType.ID
GROUP BY TB_DetailOfDelivery.ID) AS NumberBoxesLoaded ON DetailOfDelivery.ID = NumberBoxesLoaded.ID
و نتیجه پرسو جو در عکس زیر مشخص هستش.
مشکل من از اینجا شروع میشه که چطوری می تونم مقادیر فیلد Remaind را با هم جمع کنم به شرطی که نوع جعبه (CaseName) و نوع میوه (FruitType) با هم برابر باشه؟104041

Mahmoud.Afrad
شنبه 21 اردیبهشت 1392, 19:48 عصر
براساس اون دو ستون group by کنید:

SELECT CaseName ,
FruitType ,
SUM(Remain)
FROM Table_1
GROUP BY CaseName , FruitType

araz_pashazadeh
یک شنبه 22 اردیبهشت 1392, 12:19 عصر
شما پرسو جوی منو دستکاری کردی من تمام اطلاعاتی که جلوی Select نوشتم همشو می خوام.
در این صورت هم در قسمت Group by باید همشون نوشته بشن.

Mahmoud.Afrad
یک شنبه 22 اردیبهشت 1392, 21:53 عصر
نمونه خروجی ای که میخواهید رو بر اساس تصویر پست اول اینجا قرار بدید تا مشخص بشه دقیقا چه چیزی مورد نظر شماست.

araz_pashazadeh
یک شنبه 29 اردیبهشت 1392, 10:56 صبح
دوست عزیز من در پست اول همه موارد را توضیح دادم و در عکسی هم که ضمینه کردم مشخصه که می خوام نتیجه به چه شکلی باشه.
لطفا به توضیحی که در زیر دادم و عکسی که در پست اول هست نگاه کنید کاملا واضح هستش.
مشکل من از اینجا شروع میشه که چطوری می تونم مقادیر فیلد Remaind را با هم جمع کنم به شرطی که نوع جعبه (CaseName) و نوع میوه (FruitType) با هم برابر باشه؟

محمد سلیم آبادی
یک شنبه 29 اردیبهشت 1392, 11:40 صبح
این نتیجه ای که در پست اول قرار دادین نتیجه کوئری اشاره شده است یا نتیجه مورد نظر (خواسته شده)؟ اگر نتیجه مورد نظر هست پس نتیجه کوئری که نوشتین چی هست؟

cherchil_hra
دوشنبه 30 اردیبهشت 1392, 08:03 صبح
اگه منظور شما این هست که ستونی اضافه بشه که در انتهای هر سطر میزان فضای باقیمانده در کل رو به شما نشون بده، با فرض اینکه نتیجه select شما جدول MyTable شده است می توانید از این کد استفاده کنید:

SELECT ID,
DeliveryDetid,
CaseTypeID,
CaseCapacity,
CaseName,
CaseCount,
FruitType,
NumberBoxesLoaded,
Remaind,
SUM(Remaind) OVER(PARTITION BY CaseTypeID, FruitType) AS Total
FROM MyTable
ORDER BY ID


104406

موفق باشید!

محمد سلیم آبادی
دوشنبه 30 اردیبهشت 1392, 11:24 صبح
براساس اون دو ستون group by کنید:

SELECT CaseName ,
FruitType ,
SUM(Remain)
FROM Table_1
GROUP BY CaseName , FruitType



شما پرسو جوی منو دستکاری کردی من تمام اطلاعاتی که جلوی Select نوشتم همشو می خوام.
در این صورت هم در قسمت Group by باید همشون نوشته بشن.


اگه منظور شما این هست که ستونی اضافه بشه که در انتهای هر سطر میزان فضای باقیمانده در کل رو به شما نشون بده، با فرض اینکه نتیجه select شما جدول MyTable شده است می توانید از این کد استفاده کنید:

SELECT ID,
DeliveryDetid,
CaseTypeID,
CaseCapacity,
CaseName,
CaseCount,
FruitType,
NumberBoxesLoaded,
Remaind,
SUM(Remaind) OVER(PARTITION BY CaseTypeID, FruitType) AS Total
FROM MyTable
ORDER BY ID


104406

موفق باشید!

با توجه به هر سه پست جواب می تواند به این شکل نیز باشد:
SELECT ID,
DeliveryDetid,
CaseTypeID,
CaseCapacity,
CaseName,
CaseCount,
FruitType,
NumberBoxesLoaded,
Remaind,
D.Total
-- SUM(Remaind) OVER(PARTITION BY CaseTypeID, FruitType) AS Total
FROM MyTable M
INNER JOIN (SELECT CaseName ,
FruitType ,
SUM(Remain) AS Total
FROM MyTable
GROUP BY CaseName , FruitType)D
ON M.CaseName = D.CaseName
AND M.FruitType = D.FruitType
ORDER BY ID;