有这样一张表
desc t
name varchar2(255) pk,
rank varchar2(1) //值为1-4
insert into t values('a',1);
insert into t values('a',2);
insert into t values('a',3);
insert into t values('a',4);
insert into t values('a',1);
insert into t values('a',2);
insert into t values('b',1);
insert into t values('b',2);可是最终的报表要求的输出格式是:
name rank_1_count rank_2_count rank_3_count rank_4_count
a 2 2 1 1
b 1 1 0 0我现在的写法是通过一个复杂的sql完成的,有没有简单的写法或是oracle的内置函数可以完成?
desc t
name varchar2(255) pk,
rank varchar2(1) //值为1-4
insert into t values('a',1);
insert into t values('a',2);
insert into t values('a',3);
insert into t values('a',4);
insert into t values('a',1);
insert into t values('a',2);
insert into t values('b',1);
insert into t values('b',2);可是最终的报表要求的输出格式是:
name rank_1_count rank_2_count rank_3_count rank_4_count
a 2 2 1 1
b 1 1 0 0我现在的写法是通过一个复杂的sql完成的,有没有简单的写法或是oracle的内置函数可以完成?
name,
sum(decode(rank,1,1,0)) rank_1_count,
sum(decode(rank,2,1,0)) rank_2_count,
sum(decode(rank,3,1,0)) rank_3_count,
sum(decode(rank,4,1,0)) rank_4_count
FROM t;
貌似这张表里有两个字段name 和rankname rank
a 1
a 2
a 3
a 4
a 1
a 2
b 1
b 2这样的数据结构,
我是在FineReport的设计器中 把name和rank字段都拖入到格子里,然后再把name字段拖入格子,做成一个简单的交叉表,然后name字段设置属性为个数。就可以得到楼主想要的效果,整个过程不超过四步 没有楼上讲的那么复杂嘛
SELECT
name,
count(decode(rank,1,1,0)) rank_1_count,
count(decode(rank,2,1,0)) rank_2_count,
count(decode(rank,3,1,0)) rank_3_count,
count(decode(rank,4,1,0)) rank_4_count
FROM t
group by name;