我真的绞尽脑汁试图弄明白这一点。
给出以下样本数据:
CustomerNo Product Country Month Price CostA CostB
CUSTA PRD AU 1 100 200 300
CUSTB PRD AU 1 115 200 300
CUSTA PRD AU 2 120 250 350
CUSTB PRD AU 2 150 250 350
CUSTC PRD AU 3 125 300 400
CUSTD PRD AU 3 135 300 400
价格由客户存储,成本(CostA和CostB)按国家/地区存储。
我需要根据范围获得“不同”的成本总和。
例如,我需要获得第一季度(1月至2月)的成本总和。
CostA的正确金额为200 + 250 + 300,CostB为300 + 350 + 400
以下查询返回国家/地区的所有费用总和,例如200 + 250 + 300 * 2的费用A.
SELECT DISTINCT
c.Country,
costAQ1.SumGross AS costAQ1
FROM Customers c
INNER JOIN
(
SELECT Country,
SUM(CostA) AS SumGross
FROM Customers
WHERE [Month] BETWEEN 1 AND 3
GROUP BY
Country
) AS costAQ1
ON p.Country = costAQ1.Country
知道我怎么能做到这一点吗?
由于
编辑:
这段代码似乎已经完成了
SELECT DISTINCT
c.Country,
CostA.SumGross as CostA,
CostB.SumGross as CostB
FROM Customers c
INNER JOIN
(
SELECT Country
SUM(DISTINCT CostA) AS SumGross
FROM Customers
WHERE [Month] BETWEEN 1 AND 3
GROUP BY
Country
) AS CostA
ON c.Country = CostA.Country
INNER JOIN
(
SELECT Country,
SUM(DISTINCT CostB) AS SumGross
FROM Customers
WHERE [Month] BETWEEN 1 AND 3
GROUP BY
Country
) AS CostB
ON c.Country = CostB.Country
返回:
Country CostA CostB
AU 750 1050
答案 0 :(得分:3)
我不确定你为什么会这样做,也许你在那里有重复的值,你试图忽略它们。试试这个:
SELECT Country, SUM(DISTINCT CostA) AS SumGross
FROM Customers
WHERE [Month] BETWEEN 1 AND 3
GROUP BY Country
编辑:
您可以通过以下方式实现上次发布的查询:
SELECT Country,
SUM(DISTINCT CostA) AS SumGrossA,
SUM(DISTINCT CostB) AS SumGrossB
FROM Customers
WHERE [Month] BETWEEN 1 AND 3
GROUP BY Country
编辑:
要包含额外的宿舍,您可以这样做:
SELECT a.Country,
a.SumGrossAQ1,
a.SumGrossBQ1,
b.SumGrossAQ2,
b.SumGrossBQ2
FROM (
SELECT Country,
SUM(DISTINCT CostA) AS SumGrossAQ1,
SUM(DISTINCT CostB) AS SumGrossBQ1
FROM Customers
WHERE [Month] BETWEEN 1 AND 3
GROUP BY Country
) a
LEFT JOIN (
SELECT Country,
SUM(DISTINCT CostA) AS SumGrossAQ2,
SUM(DISTINCT CostB) AS SumGrossBQ2
FROM Customers
WHERE [Month] BETWEEN 4 AND 6
GROUP BY Country
) b ON a.country = b.country
sqlfiddle demo 在此示例中,您没有Q2的数据,但请在数据中尝试。
答案 1 :(得分:1)
SELECT Country, SUM(month_cost) AS SumGross
FROM (SELECT Country,Month, SUM(DISTINCT CostA) AS month_cost
FROM Customers
WHERE [Month] BETWEEN 1 AND 3
GROUP BY Country,Month) A
GROUP BY Country