2011-04-27 153 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'