我想,在表A中,数据如:
A:
j k l
oracle 迅 2010-11
java 鲁迅 2010-11
c 李刚 2010-10
我现想按月份统计书的数量,结果如下:
月份 数量
1 0
2 0
3 0
....
10 1
11 2
12 0
请问,这样SQL要怎样写?
A:
j k l
oracle 迅 2010-11
java 鲁迅 2010-11
c 李刚 2010-10
我现想按月份统计书的数量,结果如下:
月份 数量
1 0
2 0
3 0
....
10 1
11 2
12 0
请问,这样SQL要怎样写?
from A
group by to_char(l,'yy')
select substr(l,6,2) 月份,count(*) 数量 from a group by substr(l,6,2);
但应该是to_char(l,'mm'),如果是字符串则可以使用我的方法
FROM (SELECT substr(l, 6, 2) l, COUNT(*) amount FROM a GROUP BY substr(l, 6, 2)) a,
(SELECT lpad(to_char(LEVEL), 2, '0') l FROM dual CONNECT BY LEVEL <= 12) b
WHERE b.l = a.l(+)
ORDER BY b.l;
create table test(j varchar2(10),k varchar2(10),l date);
insert into test values('oracle','xun',to_date('2010-11','YYYY-MM'));
insert into test values('java','luxun',to_date('2010-11','YYYY-MM'));
insert into test values('c','xun',to_date('2010-11','YYYY-MM'))insert into test values('c','xun',sysdate);
insert into test values('java','xun',sysdate);
insert into test values('c++','xun',sysdate);SELECT b.l 月份, nvl(a.amount, 0) 数量
FROM (select to_char(l, 'mm') l, count(*) amount
from test
group by to_char(l, 'mm')) a,
(SELECT lpad(to_char(LEVEL), 2, '0') l
FROM dual
CONNECT BY LEVEL <= 12) b
WHERE b.l = a.l(+)
ORDER BY b.l;
/*
月份 数量
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0
11 3
12 0
*/