【发布时间】:2017-02-15 16:43:34
【问题描述】:
我有三个表:Table1 (AF)、Table2 (MC) 和 Table3 (SC)
我目前对这些表有这样的查询:
SELECT
AF.[Product Number],
AF.[Week End Date],
AF.[Inv Change Cost],
AF.[Gross Sales Lbs],
AF.[Production Lbs],
MC.[Actual Usage Cost] AS MeatCost,
SC.[Actual Usage Cost] AS SeasonCost
FROM Table1 AF
FULL JOIN Table2 MC ON MC.[Product Number] = AF.[Product Number] AND MC.[Week Ending Date] = AF.[Week End Date]
FULL JOIN Table3 SC ON SC.[Product Number] = AF.[Product Number] AND SC.[Week Ending Date] = MC.[Week Ending Date]
WHERE
AF.[Product Number] = '96443' AND
AF.[Week End Date] = '2/4/2017' AND
MC.[Rout Line Name] = 'Total Cost' AND
SC.[Rout Line Name] = 'Total Cost'
返回以下内容:
Prod # | WE Date | IC Cost | Gross Sales | Prod Lbs | Meat Cost | Season Cost |
96443 2/4/2017 -123456 1000 2000 5000 10000
96443 2/4/2017 -123456 1000 2000 5000 20000
96443 2/4/2017 -123456 1000 2000 6000 10000
96443 2/4/2017 -123456 1000 2000 6000 20000
但是,我希望能够对肉类和季节进行求和,因此表格如下所示:
Prod # | WE Date | IC Cost | Gross Sales | Prod Lbs | Meat Cost | Season Cost |
96443 2/4/2017 -123456 1000 2000 11000 30000
我已经尝试了以下语句,但是我得到了两个 Sum 的所有四条记录的总和,这不是我想要返回的值:
SELECT
AF.[Product Number],
AF.[Week End Date],
AF.[Inv Change Cost],
AF.[Gross Sales Lbs],
AF.[Production Lbs],
SUM(MC.[Actual Usage Cost]) AS MeatCost,
SUM(SC.[Actual Usage Cost]) AS SeasonCost
FROM Table1 AF
JOIN Table2 MC ON MC.[Product Number] = AF.[Product Number] AND MC.[Week Ending Date] = AF.[Week End Date]
JOIN Table3 SC ON SC.[Product Number] = AF.[Product Number] AND SC.[Week Ending Date] = MC.[Week Ending Date]
WHERE
AF.[Product Number] = '96443' AND
AF.[Week End Date] = '2/4/2017' AND
MC.[Rout Line Name] = 'Total Cost' AND
SC.[Rout Line Name] = 'Total Cost'
GROUP BY
AF.[Product Number],
AF.[Week End Date],
AF.[Inv Change Cost],
AF.[Gross Sales Lbs],
AF.[Production Lbs];
返回结果:
Prod # | WE Date | IC Cost | Gross Sales | Prod Lbs | Meat Cost | Season Cost |
96443 2/4/2017 -123456 1000 2000 22000 60000
我是否需要对所有字段求和才能获得所需的结果?
更新:
我尝试过这样的说法:
SELECT
AF.[Product Number],
AF.[Week End Date],
AF.[Inv Change Cost],
AF.[Gross Sales Lbs],
AF.[Production Lbs],
MC.MeatCost,
SC.SeasonCost
FROM Table1 AF
JOIN(
SELECT [Product Number], [Week Ending Date], SUM([Actual Usage Cost]) AS MeatCost
FROM Table2
GROUP BY [Product Number], [Week Ending Date]
)MC ON
AF.[Product Number] = MC.[Product Number] AND
AF.[Week End Date] = MC.[Week Ending Date]
JOIN(
SELECT [Product Number], [Week Ending Date], SUM([Actual Usage Cost]) AS SeasonCost
FROM Table3
GROUP BY [Product Number], [Week Ending Date]
)SC ON
SC.[Product Number] = MC.[Product Number] AND
SC.[Week Ending Date] = MC.[Week Ending Date]
WHERE
AF.[Product Number] = '96443' AND
AF.[Week End Date] = '2/4/2017';
但是,我得到的结果与之前的尝试相同。
【问题讨论】:
-
您还有字段吗?什么是季节成本?
-
我还有很多字段,但大多数都是各自表独有的
-
您的查询按预期工作,但需要知道 96443 个产品编号之间的区别......表 3 中的内容。
-
应该是同一个产品号。我需要为每个表指定产品编号为 X 吗?
标签: sql-server join sum