我有两张桌子,一张Orders
表包含用户订单列表和OrderShippingCosts
表,其中包含基于以下内容的每件商品的运输价格OrderTypeID
in the Orders
table.
我正在运行如下查询来计算总运费:
SELECT
SUM(CASE
WHEN OR.OrderTypeID = 1
THEN (SELECT CostOfShippingSmallParcel
FROM OrderShippingCosts)
ELSE (SELECT CostOfShippingBigParcel
FROM OrderShippingCosts)
END) AS TotalShippingCost
FROM
Orders AS OR
但我收到以下错误:
无法对包含聚合或子查询的表达式执行聚合函数
有谁知道我的查询有什么问题吗?
功能SUM https://msdn.microsoft.com/en-us/library/ms187810(v=sql.110).aspx需要一个表达在输入上,其计算结果为单个数据值,而不是数据集。表达 https://msdn.microsoft.com/en-us/library/ms190286(v=sql.110).aspx来自MSDN的定义:
是 SQL Server 数据库引擎SQL Server Database Engine计算以获得的符号和运算符的组合单个数据值.
你试图传递给SUM
函数是数据集(子查询的结果),而不是单个数据值。这是您尝试查询的内容的简化:
SELECT SUM(SELECT Number FROM SomeTable)
这是无效的。有效的查询将是:
SELECT SUM(Value) FROM SomeTable
在你的特殊情况下看起来你失踪了JOIN
。你原来的逻辑将得出整个的总结OrderShippingCosts
表的每一行Orders
桌子。我想,应该是这样的:
SELECT
SUM
(
CASE
WHEN ord.OrderTypeID = 1 THEN ship.CostOfShippingSmallParcel
ELSE ship.CostOfShippingBigParcel
END
) TotalShippingCost
FROM Orders AS ord
JOIN OrderShippingCosts ship ON /* your search condition, e.g.: ord.OrderID = ship.OrderID */
顺便说一下,使用保留符号作为别名、名称等并不是一个好主意。在您的查询中您使用OR
作为别名Orders
桌子。象征OR
保留用于逻辑or https://msdn.microsoft.com/en-us/library/ms188361.aspx手术。如果您确实需要使用保留符号,请将其包装为[
and ]
方括号。看here https://technet.microsoft.com/en-us/library/ms176027(v=sql.105).aspx and here https://msdn.microsoft.com/en-us/library/ms175874(v=sql.110).aspx更多细节。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)