2012-05-11 9 views
1

私は、多くの要約統計量を含むプロジェクトに取り組んできました。私にとって非常に役立つことは、すべての行に表示されるクエリの結果と同じ変数を設定することです。何かのようにクエリのユーザー定義変数

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

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

忍者編集私は試しましたが、失敗しました。エラーは、キーワードの近くに不正な構文を使用して、変数のための@を使っているので、私は、SQL Serverを使用していると仮定

+2

変数を設定するクエリにかっこを追加します(select count(*)を[population]として からmyTableに変更) – 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

を選択しています。次のスクリプトは、3つの列(各カウントに1つ)を持つ単一の行を返します。私はそれはあなたが要求した正確に何ではないですけど、私はそれが同じ情報を返すための簡単な方法だと思います:あなたの最後の段落に基づいて

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

関連する問題