2012-05-11 53 views
1

我一直在處理一個包含許多彙總統計信息的項目。有一件事對我很有幫助,那就是將變量設置爲等於每行顯示的查詢結果。像查詢中的用戶定義變量

declare @totalpop int 
set @totalpop = select count(*) as [population] 
from myTable 

select sex, count(sex), @totalpop 
from myTable 

忍者編輯查詢我試過了,但它失敗了。錯誤是關鍵字附近的語法不正確選擇

+2

向設置變量的查詢添加括號(從myTable中選擇count(*)as [population] ) – Arnoldiusss

回答

2

根據您的最後一段,這似乎是你想要什麼:

SELECT tsum.*, sum(cnt) over (partition by NULL) as TotalPop 
FROM (SELECT gender, count(*) as cnt 
     FROM t 
     GROUP BY gender 
    ) tsum 

帶有「over」子句的表達式是一個窗口函數,它將所有窗口相加。

+0

這工作就像我想要的。我沒有辦法解決這個問題嗎? – wootscootinboogie

1
SELECT gender, count(gender), @totalPop 
FROM myTable 
2
SELECT gender, count(gender) AS countGender, @totalPop AS totalPop 
FROM myTable 
GROUP BY gender 
+0

已更新我的查詢以反映我所嘗試的內容。 – wootscootinboogie

1

由於您使用@變量,我假設你使用SQL Server。以下腳本返回一行,包含3列(每個計數一個)。我知道這不完全是你要求什麼,但我想這是返回相同的信息的簡單方法:

DECLARE @COUNT_TOTAL INT; 
DECLARE @COUNT_MALE INT; 
DECLARE @COUNT_FEMALE INT; 

SELECT @COUNT_TOTAL = COUNT(*) 
    @COUNT_MALE = SUM(CASE WHEN gender='MALE' THEN 1 ELSE 0 END), 
    @COUNT_FEMALE = SUM(CASE WHEN gender='FEMALE' THEN 1 ELSE 0 END), 
FROM myTable; 

SELECT @COUNT_TOTAL AS [COUNT_TOTAL] 
    , @COUNT_MALE AS [COUNT_MALE] 
    , @COUNT_FEMALE AS [COUNT_FEMALE]; 
+0

我確實是SQL Server的新手。你能否指點我一些文獻爲什麼@不好分配變量? – wootscootinboogie

+1

實際上,使用'@'是在T-SQL中創建和使用變量的唯一方法**。您的查詢的問題是語法。我更新了示例以將值存儲到局部變量中。 –

+0

謝謝,善良的先生。我只是剛開始使用SQL – wootscootinboogie