2011-03-17 73 views
0

這個SQL有什麼問題?從另一個表中選擇並彙總。這個SQL有什麼問題?

SELECT Id, (select SUM(VALUE) from SomeTable) AS SumValue, GETDATE() 
FROM MyTable 
WHERE SumValue > 0 
+0

查看SQL的HAVING而不是WHERE – 2011-03-17 10:48:57

+0

'TABLE'是SQL中的保留工作,不能用作不帶引號的表名稱。 – 2011-03-17 10:49:18

+0

你得到了什麼錯誤信息,還是僅僅返回錯誤的結果?在這種情況下,需要更詳細的例子來回答這個問題。 – 2011-03-17 10:49:56

回答

1

你不能在同一個查詢中的SELECT子句中使用別名欄中,除了在ORDER BY。

它需要subqueried

SELECT Id, SumValue, GETDATE() 
FROM (
    SELECT Id, (select SUM(VALUE) from TABLE) AS SumValue 
    FROM MyTable 
) X 
WHERE SumValue > 0 

這是一般情況。對於您的特定查詢,它沒有任何意義,因爲子查詢與外部查詢沒有關聯,因此NO行顯示或ALL行顯示(具有相同的SumValue)。我只是簡單地假設你已經簡化了查詢,因爲「table」的表名實際上不起作用。

0

正確的做法是

SELECT Id, (select SUM(VALUE) from TABLE) AS SumValue, GETDATE() 
FROM MyTable 
WHERE (select SUM(VALUE) from TABLE) > 0 
1

我可能會改寫這樣的:

SELECT a.Id, b.SumValue, GETDATE() as [now] 
FROM MyTable a 
Join 
(
select id, SUM(VALUE) as [SumValue] 
from [TABLE] 
Group by id 
)b on a.Id = b.Id 
WHERE b.SumValue > 0 

這是假設你正在合計值涉及您的表中的ID?

+0

我想說,這可能是最接近克里斯試圖實現的,但有這麼少的信息,以及一個似乎沒有任何目的的sql語句,可能無法確定。 – anothershrubery 2011-03-17 10:55:31

+0

@anothershrubery - 完全同意,當您沒有信息時,很難嘗試選擇最佳選項。模式,可能的數據,預期的輸出等。但是這就是它的樂趣 - 對吧? :) – codingbadger 2011-03-17 11:00:39