繁体   English   中英

SQL Server:尝试在SELECT语句中使用SUM时出错

[英]SQL Server: Error when trying to use SUM in SELECT Statement

我有此sql查询,我想在其中检索2005年8月的销售总额。无论何时运行,都会收到错误消息“选择列表中的列无效,因为该列未包含在汇总函数或GROUP BY子句”。 如何解决此问题,使其显示所有列并在repsales.amount列中显示总和?

SELECT *, SUM(repsales.amount) AS amount 
FROM repsales
WHERE repsales.saledate BETWEEN '2005-08-01' AND '2005-08-31'

您可以使用窗口功能:

SELECT rs.*, SUM(rs.amount) OVER () AS total_amount 
FROM repsales rs
WHERE rs.saledate BETWEEN '2005-08-01' AND '2005-08-31';

我的答案是使用SUM作为分析/窗口功能。 这意味着将为每一行分配一个值,这与将SUMGROUP BY使用时会发生汇总。

使用SUM(amount) OVER ()将窗口定义为整个表。 即,该总和将是金额的总和。

另一种替代解决方案是在select和groupby语句中逐一声明列名。 IE下面的示例按数据部门和类别分组:

select rs.department,rs.category,sum(rs.amount) as SumAmount
from repsales rs
where rs.saledate BETWEEN '2005-08-01' AND '2005-08-31';
group by rs.department, rs.category

如果需要所有列,则可以将上面查询的结果集保存在临时表中(选择...到#temp from ...中),并像下面这样使用:

select rs.*,t.SumSmount
from repsales rs
inner join #temp t on t.department=rs.department and t.category=rs.category

将金额总和插入具有唯一值列dept,category等的临时表中...

Select rs.salespersonID, rs.OtherUniqueColumes, Sum(rs.amount) AS Amout
INTO #tempSales FROM repsales
WHERE repsales.saledate BETWEEN '2005-08-01' AND '2005-08-31'
Group By rs.salespersonID, rs.OtherUniqueColumes

将临时表与原始表连接起来以获取所有其他列

SELECT rs.*, t.Amount
FROM repSales rs INNER JOIN #tempSales t on rs.salespersonID = t.salespersonID AND rs.OtherUniqueColumes = t.OtherUniqueColumes

DROP TABLE #tempSales

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM