来自论坛上的一个帖:
【问题】
有以下一张表:
/**创建测试用表**/
CREATE TABLE info(
ID VARCHAR2(10),
brand VARCHAR2(2)
);
/**插入测试数据**/
insert into info values('1001','A');
insert into info values('1002','A');
insert into info values('1002','B');
insert into info values('1002','B');
insert into info values('1002','B');
insert into info values('1002','C');
insert into info values('1003','A');
insert into info values('1003','B');
insert into info values('1003','C');
insert into info values('1004','A');
insert into info values('1004','A');
insert into info values('1004','B');
insert into info values('1005','A');
insert into info values('1005','A');
楼主希望的结果是:
IDBRAND
NUM
NUM
1001A
1
1
1001B
0
0
1001C
0
0
1002A
1
1
1002B
3
3
1002C
1
1
1003A
1
1
1003B
1
1
1003C
1
1
1004A
2
2
1004B
1
1
1004C
0
0
1005A
2
2
1005B
0
0
1005C
0
0
描述如下:假设我有如上的数据,表的名字假设为info吧,我想得到如下的的输出,
就是多出来的num字段,是对id和brand组合的计数统计,关键问题是,比如1001和B的组合是没有的,但是也要给出一个0,来表示没有这个组合,其实如果是直接忽略掉次数为0的这种情况是比较简单的,但是一定要把为0的情况也列出来。我实在想不出来了,求助大家帮帮忙,谢谢了
就是多出来的num字段,是对id和brand组合的计数统计,关键问题是,比如1001和B的组合是没有的,但是也要给出一个0,来表示没有这个组合,其实如果是直接忽略掉次数为0的这种情况是比较简单的,但是一定要把为0的情况也列出来。我实在想不出来了,求助大家帮帮忙,谢谢了
作者 陈字文(热衷于PM\ORACLE\JAVA等,欢迎同行交流):ziwen#163.com 扣扣:4零9零2零1零零
/**对笛卡尔积的结果求根**/
SELECT A.ID,
B.BRAND,
SQRT(SUM(CASE WHEN A.ID=B.ID AND A.BRAND=B.BRAND THEN 1 ELSE 0 END)) AS NUM
FROM INFO A, INFO B
GROUP BY A.ID,B.BRAND
ORDER BY 1, 2