我有一个收集许多不同列的查询,我想要包含一个列,该列汇总订单中每个组件的价格。现在,我已经有一个列,只显示订单的每个组件的价格,但我不知道如何创建这个新列。
我认为代码会是这样的,但是当我尝试运行此代码时,我不清楚聚合函数是什么或为什么我会收到有关聚合函数的错误。
SELECT ID, Location, Price, (SUM(PriceDescription) FROM table GROUP BY ID WHERE PriceDescription LIKE 'Cost.%' AS Summary)
FROM table
当我说每个组件时,我的意思是我拥有的每个ID都有许多不同的项目构成了一般价格。我只想知道我在压力清洗机上需要花多少钱才能买到这些,这就是为什么我说“价格描述如何......成本。%'
为了进一步说明,我收到了每个与我合作的客户的收据,在这些收据中,我记下了我使用的肥皂和我租用的高压清洗机的工具的费用。我用“成本”来标记所有这些。'所以它看起来像(Cost.Water),(Cost.Soap),(Cost.Gas),(Cost.Tools),我想这样,对于订单1,它是一个总和所有成本的列。 strong> _订单的价格和订单2的价格总和该订单的所有成本._ 价格。我还要提一下,每个订单的成本数量都不一样(有时当我使用我的电动洗衣机时,我可能不需要购买汽油,偶尔也不需要肥皂)。
我希望这是有道理的,如果没有,请告诉我如何进一步解释。
`ID Location Price PriceDescription
1 Park 10 Cost.Water
1 Park 8 Cost.Gas
1 Park 11 Cost.Soap
2 Tom 20 Cost.Water
2 Tom 6 Cost.Soap
3 Matt 15 Cost.Tools
3 Matt 15 Cost.Gas
3 Matt 21 Cost.Tools
4 College 32 Cost.Gas
4 College 22 Cost.Water
4 College 11 Cost.Tools`
我想在我的查询中创建一个类似
的列`ID Location Price Summary
1 Park 10 29
1 Park 8
1 Park 11
2 Tom 20 26
2 Tom 6
3 Matt 15 51
3 Matt 15
3 Matt 21
4 College 32 65
4 College 22
4 College 11 `
但如果'摘要'在每一行都打印而不是在顶行打印,这也没关系。
答案 0 :(得分:4)
您只要求总和(价格)超过(按地点划分)将给出如下总和:
SELECT ID, Location, Price, SUM(Price) over(Partition by Location) AS Summed_Price
FROM yourtable
WHERE PriceDescription LIKE 'Cost.%'
答案 1 :(得分:1)
首先,如果您的Price
列确实包含与'Cost.%'
匹配的值,则您不能对其应用SUM()。 SUM()需要一个数字(例如INT,FLOAT,REAL或DECIMAL)。如果是文本,则需要通过在SUM()调用中添加CAST或CONVERT子句将其显式转换为数字。
其次,您的查询语法错误:您需要GROUP BY,并且未正确指定SELECT字段。你想要SUM()价格字段,而不是PriceDescription字段(你甚至不能按照我的解释求和)
假设Price
是数字(请参阅我的第一句话),那么就可以这样做:
SELECT ID
, Location
, Price
, (SELECT SUM(Price)
FROM table
WHERE ID = T1.ID AND Location = T1.Location
) AS Summed_Price
FROM table AS T1
答案 2 :(得分:0)
获取有问题的确切结果
Select
T.ID,
T.Location,
T.Price,
CASE WHEN (R) = 1 then RN ELSE NULL END Summary
from (
select
ID,
Location,
Price ,
SUM(Price)OVER(PARTITION BY Location)RN,
ROW_number()OVER(PARTITION BY Location ORDER BY ID )R
from Table
)T
order by T.ID