2013-07-31 2 views
1

Мне нужно сделать несколько подсчетов. У меня около 6 столбцов. Что-то вроде этого:множественные подсчеты SQL с использованием нескольких запросов с использованием SQL

SELECT 
COUNT(C.ID) as 'Column 1', 
COUNT(C.ID) as 'Column 2', 
COUNT(C.ID) as 'Column 3', 
COUNT(C.ID) as 'Column 4', 
FROM CONTACT C 

Мне нужно иметь возможность запускать различные счетчики, используя различные запросы, но не знаете, как применять запросы подсчитывает в один результат.

ответ

2

У вас есть несколько вариантов здесь.

1) использовать подзапросы, как @TheSoultion предложил

2) используют использование UNION

SELECT 'A' NAME, COUNT(c.ID) [COUNT] FROM Contact c WHERE ... 
    UNION 
    SELECT 'B' NAME, COUNT(c.ID) [COUNT] FROM Contact c WHERE ... 

3) в случае, если это действительно то же подмножество, но вы хотите, чтобы подвести на основе некоторых условий, случай использования когда тогда внутри вашего счета

SELECT sum(case ... when ... then 1 else 0 end) counta, 
     sum(case ... when ... then 1 else 0 end) countb 
FROM ... WHERE ... 
+0

'Конверсия не удалась при преобразовании значения varchar 'London' в тип данных int.' - я получаю это при использовании UNION ... – PriceCheaperton

+0

@PriceCheaperton показывает ваш точный запрос, который делает это. – vittore

0

Вам необходимо запустить подзапросы, или, по крайней мере, один из способов:

SELECT 
    (SELECT COUNT(c.ID) FROM Contact c WHERE ...) AS Column1, 
    (SELECT COUNT(c.ID) FROM Contact c WHERE ...) AS Column2 
+0

'Подзапрос возвратил более 1 значения. Это недопустимо, когда подзапрос следует за =,! =, <, <= , >,> = или когда подзапрос используется как выражение. ' – PriceCheaperton

+0

@PriceCheaperton, и какое предложение WHERE' вы использовали? –

1

Если я понимаю, что вы пытаетесь сделать, я обычно в конечном итоге делает это таким образом:

SELECT 
SUM(CASE WHEN Condition1 THEN 1 END) AS Column1, 
SUM(CASE WHEN Condition2 THEN 1 END) AS Column2 
FROM Contact 
Смежные вопросы