这个题是在其他地方看到的
可是我不会,呵呵!
一个表,100条以上的信息,表的结构:SQL> desc t_d
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ---------------------------- NAME                                               VARCHAR2(10)
 COLOR                                              VARCHAR2(10)
 COUNT                                              NUMBER(5)
表中数据
SQL> select * from t_d;NAME       COLOR           COUNT
---------- ---------- ----------
产品1      red               100
产品1      red               200
产品1      red               100
产品1      red               500
产品1      blue              500
产品1      blue             1100
产品1      blue               10
产品1      blue              104
产品2      blue              104
产品2      blue              114
产品2      blue              154NAME       COLOR           COUNT
---------- ---------- ----------
产品2      blue              150
产品2      blue               15
产品2      red                15
产品2      red               150
产品2      red               250
产品2      red              2500
产品2      red             25000
产品2      red
产品1      red已选择20行。
1:
按照产品分类,仅列出各类商品中红色多于蓝色的商品以及差额数量;
2:
按照产品分类,将数据按照下列方式统计显示;
产品,红色,蓝色,

解决方案 »

  1.   

    我想到
    select name,color,sum(nvl(count,0))from t_d
    group by name,color;但是记录与记录之间如何比较。SQL> select name,color,sum(nvl(count,0)) from t_d group by name, color;NAME       COLOR      SUM(NVL(COUNT,0))
    ---------- ---------- -----------------
    产品1      red                      900
    产品1      blue                    1714
    产品2      red                    27915
    产品2      blue                     537red 和blue如何比较???
      

  2.   

    建议用存储过程实现,懒得写了,楼主自行学习一下存储过程,呵呵。1楼的已经按产品、颜色汇总出某类产品、某种颜色各有多少,下面要做的就是根据这个结果分析出不同产品中红色数量多于蓝色数量的信息,实现起来应该不难。就相当于设计一个模型,按楼主的要求对数据进行分析。第一步:知道有多少种产品:select distinct name from td
    第二步:计算出同一产品中蓝色、红色数量各有多少,然后计算差额
    第三步:将红色多于蓝色的产品插入一张临时表,插入的信息包括:产品name、红色数量、蓝色数量
    第四步:按第一步查询的结果循环做第二步、第三步
    第五步:查询临时表数据。select 产品name、红色数量、蓝色数量 from 临时表
      

  3.   

    怎么变,没有听说过
    to:3楼
    用sql语句实现不了吗?
    存储过程我还不会,呵呵。
      

  4.   

    这个很容易实现的,行列转换
    SUM+DECODE
    然后外面再来层判断
      

  5.   

    select name, nred, nblue, nred-nblue from(
      select name, sum(decode(color,'red',count,0)) nred,
        sum(decode(color,'blue',count,0)) nblue from t_d group by name
    )where nred>nblue;select name, sum(decode(color,'red',count,0)) nred,
      sum(decode(color,'blue',count,0)) nblue from t_d group by name;
      

  6.   

    楼主的需求好像不是很清楚,
    (1)既然是要求RED多于BLUE的记录,那为什么在最后显示的结构中,会是:
       产品,红色,蓝色
       这样的结构呢.
    (2)既然有颜色的数据的比较,为什么又只能根据产品进行分组呢.
      

  7.   

    select name, sum(decode(color,'red',count,-count)) sl from t_d group by name
    having sum(decode(color,'red',count,-count))>0
    select name, sum(decode(color,'red',count,0)) red,
      sum(decode(color,'blue',count,0)) blue from t_d group by name;
      

  8.   

    不错,不错,呵呵,了解了decode函数
    (decode(color,'red',count,0)),改为
    (decode(color,'red',nvl(count,0),0))就更好了