2016-04-12 3 views
0

У меня есть таблица:Oracle SQL. Граф на основе двух столбцов

JIRA_KEY DATACENTER STATUS 
    1   US  CLOSED 
    2   EM  CLOSED 
    3   AP  CLOSED 
    4   US  CLOSED 
    5   EM  IN PROGRESS 
    6   AP  CANCELLED 
    7   US  IN PROGRESS 
    8   US  CANCELLED 
    9   AP  CANCELLED 
10   AP  IN PROGRESS 

Ожидаемый выход:

Datacenter TotalJiras Closed InProgress Cancelled 
EMEA   2  1  1   0 
APAC   4  1  1   2 
AMERICA  4  2  1   1 

Я попытался создать вид:

create or replace view VW_JIRA_STATUS_BK AS 
SELECT count(JIRA_KEY) JIRA , 
    decode (substr(data_center,1,2),'EM', 'EMEA', 'AP', 'APAC', 'US', 'AMERICA') as REGION, 
    status 
from hw_jira_status 
group by data_center , status; 

select * from VW_JIRA_STATUS_BK 

не отображает результат, как и ожидалось.

Любая помощь будет оценена по достоинству.

+0

General GROUP BY правило: «Если GROUP BY пункте указано, каждая ссылка на столбец в списке выбора должны либо определить столбец группировки или быть аргументом функции набора ". – jarlh

ответ

2

Вам необходимо условные агрегаты с использованием CASE, по одному для каждого столбца результата:

create or replace view VW_JIRA_STATUS_BK AS 
SELECT 
    decode (substr(data_center,1,2),'EM', 'EMEA', 'AP', 'APAC', 'US', 'AMERICA') as REGION, 
    count(JIRA_KEY) AS TotalJiras, 
    COUNT(CASE WHEN Status = 'CLOSED' THEN 1 END) AS Closed, 
    COUNT(CASE WHEN Status = 'IN PROGRESS' THEN 1 END) AS InProgress, 
    COUNT(CASE WHEN Status = 'CANCELLED' THEN 1 END) AS Cancelled 
from hw_jira_status 
group by data_center; -- don't group by "Status" 

Почему вы применяете SUBSTR на data_center если это два символа в любом случае?

Btw, я pefer Стандартный SQL, CASE над устаревшей DECODE Оракула:

CASE data_center 
    WHEN 'EM' THEN 'EMEA' 
    WHEN 'AP' THEN 'APAC' 
    WHEN 'US' THEN 'AMERICA' 
END as REGION, 
+0

Это сработало. Я заменил код SubStr декодирования с футляром, как предложено .select СЛУЧАЙ data_center КОГДА как «EM%» THEN «ЕМЕА» КОГДА как «AP%» THEN «APAC» КОГДА как «США%» THEN «АМЕРИКИ», Хорошо учиться для меня. спасибо –

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