2015-12-27 4 views
-1

мне нужно посчитать строки в таблице Oracle по типу:граф строк в таблице Oracle

CREATE TABLE EVENTS(
    EVENTID INTEGER NOT NULL, 
    SOURCE VARCHAR2(50), 
    TYPE VARCHAR2(50), 
    EVENT_DATE DATE, 
    DESCRIPTION VARCHAR2(100) 
) 
/

мне нужно 4 типа событий - Critical, Info, Warning и Error

Как я могу сделать это с один SQL-запрос?

Конечный результат должен быть один ряд результат:

All | Critical | Info | Warning | Error 
------------------------------------------- 
23 | 2  | 13 | 2 | 3 

ответ

2
SELECT 
    COUNT(*) "All", 
    COUNT(CASE WHEN TYPE = 'Critical' THEN 1 END) "Critical", 
    COUNT(CASE WHEN TYPE = 'Info' THEN 1 END) "Info", 
    COUNT(CASE WHEN TYPE = 'Warning' THEN 1 END) "Warning", 
    COUNT(CASE WHEN TYPE = 'Error' THEN 1 END) "Error" 
FROM 
    EVENTS; 
1

или с использованием поворотного

SELECT * FROM 
(
    SELECT type, count(*) over() "All" 
    FROM events 
) 
PIVOT 
(

    COUNT(type) 
    FOR type IN ('Critical', 'Info', 'Warning', 'Error') 
) 
+0

Я получаю ORA-00937: функция 00937 группа не является одной группы. 00000 - «не групповая групповая функция» –

+0

это работает только на 11g и выше, извините, должно было бы упомянуть, что –

+0

Я использую 11g XE. Ну, похоже, я не могу его использовать –

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