oracle在一行中选择两个计数值

时间:2017-01-03 20:09:03

标签: oracle

我在oracle中需要这个select的帮助。我有2列的表:(表>日期,值),例如:

1.1.2017, 16
1.1.2017, 16
1.1.2017, 16
1.1.2017, 17
1.2.2017, 16
1.2.2017, 16
1.2.2017, 17
1.2.2017, 17
1.3.2017, 16

结果必须是:

1.1.2017 as date, 3 as count of 16, 1 as count of 17
1.2.2017, 2, 2
1.3.2017, 1, 0

当前SQL:

select date, count(value) from table group by date, value

但是,这不会返回相同的日期,其中一行包含两个值的计数。

1 个答案:

答案 0 :(得分:0)

你需要条件计数,如下所示:

with
     your_table ( dt, value ) as (
       select to_date('1.1.2017', 'mm.dd.yyyy'), 16 from dual union all
       select to_date('1.1.2017', 'mm.dd.yyyy'), 16 from dual union all 
       select to_date('1.1.2017', 'mm.dd.yyyy'), 16 from dual union all
       select to_date('1.1.2017', 'mm.dd.yyyy'), 17 from dual union all
       select to_date('1.2.2017', 'mm.dd.yyyy'), 16 from dual union all
       select to_date('1.2.2017', 'mm.dd.yyyy'), 16 from dual union all
       select to_date('1.2.2017', 'mm.dd.yyyy'), 17 from dual union all
       select to_date('1.2.2017', 'mm.dd.yyyy'), 17 from dual union all
       select to_date('1.3.2017', 'mm.dd.yyyy'), 16 from dual
     )
--  end of test data; solution (SQL query) begins below this line
select   dt, count(case value when 16 then 'x' end) as ct_16,
             count(case value when 17 then 'x' end) as ct_17
from     your_table
group by dt;

DT          CT_16  CT_17
----------  -----  -----
01/01/2017      3      1
01/02/2017      2      2
01/03/2017      1      0