本帖最后由 robinson7891 于 2010-10-05 22:01:17 编辑

解决方案 »

  1.   

    是这样的:他给了一个例子,他插入了一些数据往表basket[53, BREAD], [53, MILK], [53, BUTTER, [54, BREAD], [54, BUTTER], [55, BREAD],
    就是编号(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
      

  2.   

    是这样的:他给了一个例子,他插入了一些数据往表basket[53, BREAD], [53, MILK], [53, BUTTER, [54, BREAD], [54, BUTTER], [55, BREAD],
    就是编号(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
      

  3.   

    这是根据名称分组,并统计记录个数的SQL语句
    不过看了你输出的结果,有点复杂。
      

  4.   

      使用ROOLUPSELECT ITEM,sum(1)   COUNTER
    FROM  BASKET
    group   by   rollup(ITEM);
      

  5.   

    参考
    http://www.svn8.com/sql/Oracle/2010062338782.html
      

  6.   


    --应该用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;