2016-04-05 72 views
0

我是StackOverflow的新手,因此對格式不正確表示抱歉。計算同一月份的行數

注意:我正在使用Oracle SQL Developer。

我想下面的查詢結果轉換: Query 1

到這樣的事情:

目前,我有我的主要SQL的作品,但它是一個使用子查詢,像這樣:

SELECT distinct(eprdgrp.name) product_group, 
    eprodpkg.name   product_name, 
(select count(creation_date) from ECPS_CA 
    where EXTRACT(month from CREATION_DATE)='2' 
AND STATUS='STATUS_NAME' 
AND ABC_CA.ID=ABC_CA.MASTER_ID 
    AND ABC_CA.PROD_PKG_ID IN (SELECT ID FROM ABC_PROD_PKG WHERE NAME=eprodpkg.name))  submission_feb, 
    (select count(creation_date) from ABC_CA 
    where EXTRACT(year from CREATION_DATE)=(2016) 
    and EXTRACT(month from CREATION_DATE)='3' 
    AND STATUS='STATUS_NAME' 
AND ABC_CA.ID=ABC_CA.MASTER_ID  
AND ABC_CA.PROD_PKG_ID IN (SELECT ID FROM ABC_PROD_PKG WHERE NAME=eprodpkg.name))  submission_mar, 
... 

我嘗試使用此代碼:

(select count(eca.creation_date) from dual 
    where EXTRACT(month from eca.CREATION_DATE)='2' 
)  submission_feb, 
    (select count(eca.creation_date) from dual 
    where EXTRACT(month from eca.CREATION_DATE)='3' 
)  submission_mar, 

但它產生不同的結果

好像1和0僅僅是是否存在PRODUCT_GROUP,PRODUCT_NAME和月份組合的結果的指示符。

任何幫助表示讚賞,我希望我解釋得很好!

在此先感謝!

+0

難道僅僅是二月和三月或可以在是一年中的任何月份? –

+0

它可以是一年中的任何月份,這些僅僅是示例 –

回答

0

試試這個

select 
prod_name, name, 
sum(Case when month(creation_date)=2 then 1 else 0 end) as submission_feb, 
sum(Case when month(creation_date)=3 then 1 else 0 end) as submission_mar 
from ECPS_CA 
group by prod_name, name 
0

我會去這樣的:

select a.product_group, a.product_name, sum(a.submission_feb) as 
submission_feb, sum(a.submission_mar) as submission_mar 
from (
Select product_group, product_name, count(*) as submission_feb, 0 as 
submission_mar 
from ECPS_CA 
where EXTRACT(month from CREATION_DATE)='2' 
group by product_group, product_name 
union all 
Select product_group, product_name, 0, count(*) 
from ECPS_CA 
where EXTRACT(month from CREATION_DATE)='3' 
group by product_group, product_name 
) a 
group by a.product_group, a.product_name 
0

可以使用PIVOT功能的Oracle:

SELECT * 
FROM 
    (SELECT prod_group, prod_NAME, EXTRACT(MONTH FROM creation_date) AS creation_month 
    FROM ECPS_CA) 
PIVOT (
    COUNT(*) FOR creation_month IN (
     1 AS SUBMISSION_JAN, 
     2 AS SUBMISSION_FEB, 
     3 AS SUBMISSION_MAR, 
     ... 
     12 AS SUBMISSION_DEC 
     ) 
);