2012-05-11 3 views
1

Я работаю над проектом, который включает в себя множество сводных статистических данных. Одна вещь, которая была бы очень полезной для меня, заключалась бы в том, чтобы иметь набор переменных, равный результату запроса, который появился в каждой строке. Что-то наподобиеПользовательская переменная в запросе

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

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

ninja редактирование по запросу, который я пробовал, но это не удалось. Ошибка неправильный синтаксис около ключевого слова выберите

+2

Добавить круглые скобки к запросу, в котором вы задали переменную (выберите count (*) as [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

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

обновил мой запрос, чтобы отразить то, что я пытался. – wootscootinboogie

1

Поскольку вы используете @ для переменных, я полагаю, вы используете SQL Server. Следующий скрипт возвращает одну строку с тремя столбцами (по одному для каждого счета). Я знаю, что это не совсем то, что вы просили, но я предполагаю, что это легкий способ вернуть ту же информацию:

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

Смежные вопросы