gpt4 book ai didi

sql - 将 SQL SUM 与包含内部 SELECT 的 Case 语句一起使用

转载 作者:行者123 更新时间:2023-12-04 15:58:22 25 4
gpt4 key购买 nike

我有两张 table ,一张 Orders包含用户订单列表和 OrderShippingCosts 的表表,其中包含基于 OrderTypeID 的每件商品的运输价格在 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

但我收到以下错误:

Cannot perform an aggregate function on an expression containing an aggregate or a subquery

有人知道我的查询有什么问题吗?

最佳答案

功能 SUM在输入上接受一个表达式,它计算为单个数据值,而不是数据集。 Expression来自 MSDN 的定义:

Is a combination of symbols and operators that the SQL Server Database Engine evaluates to obtain a single data value.

您试图将数据集(子查询的结果)传递给 SUM 函数,而不是单个数据值。这是您尝试查询的简化:

SELECT SUM(SELECT Number FROM SomeTable)

这是无效的。有效的查询是:

SELECT SUM(Value) FROM SomeTable

在您的特定情况下,您似乎缺少 JOIN。您的原始逻辑将为 Orders 表的每一行生成整个 OrderShippingCosts 表的摘要。我想,应该是这样的:

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 保留手术。如果您确实需要使用保留符号,请将其包装在 [] 方括号中。看herehere了解更多详情。

关于sql - 将 SQL SUM 与包含内部 SELECT 的 Case 语句一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38350150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com