子查询返回了超过 1 个值 当子查询跟在 =、!=、<、<= 、>、>= 后面或子查询用作表达式时,不允许这样做



我运行以下查询:

SELECT Date,
Branch,
Total,
(SELECT CAST(AVG(Total) AS INT) 
FROM MaySales 
GROUP BY Branch) AS AvgSales
FROM MaySales

我想要的结果是在每日销售额旁边显示每月平均销售额,以便我可以执行case语句。

branchtbody> <<tr>500050004500
datecase statement
05 05下面avg
05、06avg
05 05 td>以上avg

当前查询尝试为单个列返回多行,而其他列则自然地每行返回一次。所以它执行失败。也许使用相关子查询是一种解决方案,但不是理想的解决方案。更喜欢使用窗口函数,如:

SELECT Date, Branch, Total,
AVG(Total) OVER (PARTITION BY Branch) AS AvgSales
FROM MaySales 

我不能在原始问题中发表评论,但看起来您选择了MaySales表中的所有行,我假设这是5月份的。在子查询中,如果您的目的是按月分组,则没有月操作符。

SELECT year(date) as BranchYear, month(date) as BranchMonth, branch, CAST(avg(TOTAL) AS int)
FROM MaySales
GROUP BY year(date), month(date), Branch 

试试上面的方法,把你的数据细化到一个月的粒度。一旦你理解了这一点,你就能更好地格式化你的数据,假设你想显示正常的每日总数和每月总数。

进一步说,我将不再使用"MaySales"表,因为这意味着您将拥有一个针对一年中的每个月的表。如果数据延长数年,那么会发生什么?有一个包含DATE、branch、TOTAL列的"BranchSales"表,我假设这些列是每天的总数,然后你就可以计算你希望大于一天的任何时间段的平均总数,包括周、月、季度和年总数

相关内容

最新更新