2011-04-27 155 views
-1

我想检索所有信息以及名称的金额总和,所以我使用此查询来达到此目的。如何编写此查询?

select SUM(Amount)as total,RecieptNo,Name,UniqueId,Date,Amount,LateFee,Other from Amount where Name='Shaikh' 

但发生此错误。 列'Amount.RecieptNo'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 所以请帮助我。

+0

我不太清楚你想要计算什么样的总和。 整个表上每个名字的总金额或每个收款人的金额/日期/等。 ?在第一种情况下:为什么选择所有其他列? – grimmig 2011-04-27 06:24:42

回答

4
Select RecieptNo, Name 
    , UniqueId, Date 
    , Amount 
    , LateFee, Other 
    , (Select Sum(A1.Amount) 
     From Amount As A1 
     Where A1.Name = A.Name) As Total 
From Amount As A 
Where Name='Shaikh' 

在SQL Server 2005+提供另一种选择:

Select RecieptNo, Name 
    , UniqueId, Date 
    , Amount 
    , LateFee, Other 
    , Sum(Amount) Over(Partition By Name) As Total 
From Amount As A 
Where Name='Shaikh' 
1

使用SUM()等集合SQL函数时,必须使用GROUP BY子句。下面的例子证明了这一点。但是,这可能不是处理查询的最理想方法。我所做的是添加一个group by子句,其中包含除SUM之外所选的所有列。例如:

select RecieptNo, Total, UniqueId, Date, Amount, LateFee, Other SUM(Amount)as total from 
Amount where Name='Shaikh' group by RecieptNo, Total, UniqueId, Date, Amount, LateFee, Other 
+1

你需要添加其他字段,如果你想这样做是错误的查询 – 2011-04-27 04:51:20

+0

@Shan Plourde:你确定你的答案是正确的吗?我有疑问。 – 2011-04-27 04:55:27

+0

由于提供的信息不多,我不确定答案是否有效。问题的关键在于,尽可能多的其他SQL查询替代方案可供选择,但对正确编程查询的阻力最小的路径是添加一个group by子句。我添加的所有内容都是查询的group by子句。它可能还需要“Amount.ReceiptNo”作为SUM(金额)之前的列。 – 2011-04-27 05:08:55

0

如果你想添加在选择列表中的另一件事情你需要按

select SUM(Amount)as total,Name from Amount where Name='Shaikh' group by Name 

则需要由子句中你组添加该字段也否则会给错误

+0

你没有正确回答这个问题。该人的问题还有很多其他栏目。你的回答也写得很差,难以理解。 – 2011-04-27 11:56:07

+0

@Shan Plourde--我想我已经回答了相关的问题......并写下下方以粗体字表示,以便更好地理解它 – 2011-04-27 12:44:33

+0

我不同意清晰度,但唉,决定是你的。 – 2011-04-27 12:58:39

1
select SUM(Amount)as total,RecieptNo,Name,UniqueId,Date,Amount,LateFee,Other from Amount 
group by RecieptNo,Name,UniqueId,Date,Amount,LateFee,Other having Name='Shaikh'