--应该用rollup可以解决 --试下,因为没环境,没测试过 with tab as( select b#, max(decode(item,'BREAD','BREAD',null))item1, max(decode(item,'BUTTER','BUTTER',null))item2, max(decode(item,'MILK','MILK',null))item3 from basket group by b#) select wm_concat(item1,item2,item3) item,sum(1) counter from tab group by rollup(item1,item2,item3) order by 1;
就是编号(b#)53的记录里有bread,milk,butter,编号(b#)54的记录有bread,butter,编号(b#)55
的记录里有bread;
然后他让你分别单个统计bread,milk,buuter的值,分别在统计在同一个编号里有两个的Item(例如bread 和butter,或是bread 和milk)(不能重复),分别在统计在同一个编号里有三个的Item(例如bread butter,milk)(不能重复),然后要求输出以下的东西:
ITEM1 ITEM2 ITEM3 COUNTER
BREAD 3
BUTTER 2
MILK 1
BREAD, BUTTER 2
BREAD, MILK 1
BUTTER, MILK 1
BREAD, BUTTER, MILK 1
就是编号(b#)53的记录里有bread,milk,butter,编号(b#)54的记录有bread,butter,编号(b#)55
的记录里有bread;
然后他让你分别单个统计所有的bread,milk,buuter的值,分别在统计在同一个编号里有两个的Item(例如bread 和butter,或是bread 和milk)(不能重复),分别在统计在同一个编号里有三个的Item(例如bread butter,milk)(不能重复),然后要求输出以下的东西:
ITEM1 ITEM2 ITEM3 COUNTER
BREAD 3
BUTTER 2
MILK 1
BREAD, BUTTER 2
BREAD, MILK 1
BUTTER, MILK 1
BREAD, BUTTER, MILK 1
不过看了你输出的结果,有点复杂。
FROM BASKET
group by rollup(ITEM);
http://www.svn8.com/sql/Oracle/2010062338782.html
--应该用rollup可以解决
--试下,因为没环境,没测试过
with tab as(
select b#,
max(decode(item,'BREAD','BREAD',null))item1,
max(decode(item,'BUTTER','BUTTER',null))item2,
max(decode(item,'MILK','MILK',null))item3
from basket group by b#)
select wm_concat(item1,item2,item3) item,sum(1) counter
from tab
group by rollup(item1,item2,item3)
order by 1;