[英]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
作为分析/窗口功能。 这意味着将为每一行分配一个值,这与将SUM
与GROUP 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.