2010-07-13 2 views
2

Существует таблица клиентов. Я хочу указать активный и неактивный статус в одном запросе. Как я могу это сделать?Сложный SQL-запрос

SELECT count(*) as ACTIVE, 
count(*) as INACTIVE 
FROM V_CUSTOMER 
WHERE STATUS='a' AND STATUS='i' 
+1

Неверный ответ, если вы выбрали? –

+0

Мне просто нужен один запрос, а не одна строка. Спасибо всем – Jack

+0

кажется, что вопрос непонятен –

ответ

4

Попробуйте использовать группу по:

SELECT count(*), STATUS FROM V_CUSTOMER 
Where STATUS='a' OR STATUS='d' 
GROUP BY STATUS 
+1

+1: Это лучший ответ –

+1

это будет считать все комментарии активными + деактивированными, но я думаю, что ему нужно seprate количество активных и деактивированных –

+2

@Jack - это решение возвращает две строки, тогда как решение, предложенное Pranay, даст вам два счета в одной строке, о которых вы просили. – APC

5

Мы можем использовать саз, чтобы перевести два значения STATUS:

SELECT 
    sum(case when STATUS = 'a' then 1 else 0 end) as ACTIVE 
    , sum(case when STATUS = 'd' then 1 else 0 end) as DEACTIVE 
FROM V_CUSTOMER 

Там нет необходимости в ИНЕКЕ, если нет большое количество записей с другими значениями для STATUS, в этом случае используйте OR вместо AND:

WHERE STATUS='a' OR STATUS='d'   
+0

Я думаю, что 'case when' является сервером sql, а не оракулом? –

+0

@StefanSteinegger - Oracle поддерживает CASE в операторах SELECT с 8i (т.е. более десяти лет) – APC

+0

Я нашел эту ссылку: http: //www.techonthenet.com/oracle/functions/case.php –

1

Я думаю, что вам нужно что-то вроде этого:

select Status, count(*) from V_Customer 
where STATUS='a' or STATUS='d' 
group by STATUS 

Это даст вам количество записей в состоянии.

3
SELECT count(decode(status,'a',1)) as ACTIVE, 
count(decode(status,'d',1)) as DEACTIVE 
FROM V_CUSTOMER 
WHERE STATUS='a' or STATUS='d' 
Смежные вопросы