列显示每个计数

时间:2015-06-08 15:20:16

标签: sql oracle multiple-columns

我正在尝试运行查询以根据年度时间戳计算记录。这是我目前的查询:

SELECT plocation AS GROUP_NUMBER, count(DISTINCT UMEMBERID) AS YEAR_ONE
    FROM HEALTH_ASSESSMENT
    WHERE PUBLICATIONDT > '31-DEC-13'AND PUBLICATIONDT < '01-JAN-15'
    GROUP BY PLOCATION

它完全符合我所需的时间框架并显示以下内容:

GROUP_NUMBER | YEAR_ONE

G12345       |      141
G12346       |       61

其中YEAR_ONE是我列出的日期,基本上是2014年。有没有办法创建一个计算第二个时间范围的附加列?例如,像这样:

GROUP_NUMBER |   YEAR_ONE     | YEAR_TWO 

G12345       |       141      |     92    
G12346       |       61       |     57
G12444       |  NULL OR BLANK |     16

此处G12444可能在YEAR_ONE参数中没有任何记录,但会在YEAR TWO参数中包含记录。有时这个查询将按月进行,因此也可能需要使用01-JAN-15 - 31-JAN-15参数设置每个列。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

您应该可以使用CASE语句执行此操作。这样的事情应该有效:

SELECT plocation AS GROUP_NUMBER
    , count(DISTINCT CASE WHEN EXTRACT( YEAR from PUBLICATIONDT) = 2014 THEN UMEMBERID ELSE null END) AS YEAR_ONE
    , count(DISTINCT CASE WHEN EXTRACT( YEAR from PUBLICATIONDT) = 2015 THEN UMEMBERID ELSE null END) AS YEAR_two
    FROM HEALTH_ASSESSMENT
    WHERE EXTRACT( YEAR from PUBLICATIONDT) BETWEEN 2014 and 2015       
GROUP BY PLOCATION