2016-04-05 70 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 
     ) 
);