我在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
但是,这不会返回相同的日期,其中一行包含两个值的计数。
答案 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