2016-04-12 14 views
0

私はテーブルを持っているに基づいて数:Oracle SQL。 2列

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

一般GROUP:「GROUP BY句が指定されている場合は、SELECTリスト内の各列参照がグループ化列を識別しなければならないのいずれかまたはセット関数の議論になります。 " – jarlh

答えて

2

あなたはCASE、各結果列のための1つを使用して条件付き集計必要があります:それはとにかく2つの文字だ場合、なぜあなたはdata_centerSUBSTRを適用ん

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" 

を?

ところで、私は標準SQLのCASE Oracleの廃止予定DECODEオーバーをpefer:ルールBY

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

それはうまくいった。私が示唆したようにケースにデコードSUBSTRコードを置き換え .SELECT CASE data_center WHEN 'EM%' のようなTHEN 'EMEA' THEN 'APの%' のような 'APAC' WHEN '米国は%' THEN 'AMERICA' のような、 私にとって良い学習です。ありがとうございました –