2012-03-05 4 views
1

У меня есть таблица SR с некоторыми записями с статусами (более 5 записей, это просто пример):SQL query- число состояний в процентах

ID STATUS 
1 NEW 
2 OPEN 
3 OPEN 
4 PENDING 
5 PENDING 

Я хочу, чтобы получить таблицу в следующем формате:

STATUS PERCENTAGE 

NEW  20 
OPEN  40 
PENDING 40 

я написал SQL запрос, но я не могу заставить его работать:

with HELPTABLE as 
(select count(*) as NUMBER 
from SR 
) 
select 
    SR.STATUS, 
    (count (*))/(HELPTABLE.NUMBER) * 100 
from 
    SR, HELPTABLE 
group by 
    SR.status 

Использование HELPTABLE Я получаю как результат 5.

Если я не поставил HELPTABLE.NUMBER, я получаю некоторый результат.

Если я делю (count (*)), скажем, с 2, я получаю результат, но если я поставлю HELPTABLE.NUMBER, который равен 5, я получаю сообщение об ошибке.

Спасибо за помощь.

+0

Какую ошибку вы получаете? –

ответ

5

Я предполагаю, что SQL Server 2005 или выше

select 
    T.STATUS, 100.0 * COUNT(*)/Total 
from 
    (
    SELECT 
     ID, STATUS, COUNT(*) OVER() AS Total 
    FROM 
     SR 
    ) T 
group by 
    T.status, T.Total 
+0

Я использую DB2. У меня есть какой-то странный результат. Я должен сохранить инструкцию WITH над вашим запросом? – Dejan

+0

@ пользователь1191860: исправлено извините. Надеюсь, это работает на DB2 – gbn

+0

Спасибо за вашу помощь, это работает. Мне просто интересно, почему я не смог сделать это с помощью инструкции WITH? Мне кажется правильным? Извините, что беспокоился, если вы знаете, может быть, ответ (правильный запрос с WITH), если не всегда. – Dejan

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