单位    产品名称     数量
  
单位1    产品1       100 
单位2    产品1       200
单位3    产品1       300
         合计        600
单位1    产品2       210
单位2    产品2       200
         合计        410...求sql语句,产生以上结果集。  急!

解决方案 »

  1.   

    SELECT A.单位,A.产品,A.数量
    FROM
    (
    SELECT 单位,产品,count(*) AS 数量
    FROM TABLE_NAME
    GROUP BY 单位,产品
    UNION
    SELECT '单位X' AS 单位,产品,sum(*) AS 数量
    FROM TABLE_NAME
    GROUP BY 产品) A
    ORDER BY A.产品
      

  2.   

    SQL> SELECT decode(grouping_id(产品名称, 单位), 1, '合计', 3, '总计', 单位),
      2         产品名称,
      3         SUM(数量)
      4  FROM   c
      5  GROUP  BY ROLLUP(产品名称, 单位)
      6  /DECODE(GROUPING_ID(产品名称,单 产品名称              SUM(数量)
    ------------------------------ -------------------- ----------
    单位1                          产品1                       100
    单位2                          产品1                       200
    单位3                          产品1                       300
    合计                           产品1                       600
    单位1                          产品2                       210
    单位2                          产品2                       200
    合计                           产品2                       410
    总计
      

  3.   

    不要总计的情况:SQL> SELECT decode(grouping_id(产品名称, 单位), 1, '合计', 单位) 单位,
      2         产品名称,
      3         SUM(数量) 数量
      4  FROM   c
      5  GROUP  BY ROLLUP(产品名称, 单位)
      6  HAVING grouping_id(产品名称, 单位) <> 3
      7  /单位                 产品名称                   数量
    -------------------- -------------------- ----------
    单位1                产品1                       100
    单位2                产品1                       200
    单位3                产品1                       300
    合计                 产品1                       600
    单位1                产品2                       210
    单位2                产品2                       200
    合计                 产品2                       4107 rows selected
      

  4.   

    用 qiaozhiwei(乔)的sql,弄出来了。duanzilin(寻) 的sql看不大懂。弄进oracle执行了一下,报错,调试不出来,晕了谢谢了!!!
      

  5.   

    谁给讲讲duanzilin(寻) 的sql 的原理?谢谢
      

  6.   

    你的 oracle 什么版本?
      

  7.   

    报错应该是不支持grouping_id,要9i才行,可以用grouping 代替,rollup应该从8i开始就开始用了SELECT decode(GROUPING(单位), 1, '合计', 单位) 单位,
           产品名称,
           SUM(数量) 数量
    FROM   c
    GROUP  BY ROLLUP(产品名称, 单位)
    HAVING GROUPING(单位) + GROUPING(产品名称) <> 2GROUPING(单位)意思是在计算单位合计时标记为1,否则为0,如果这么改还不行,试试不用这个了:SELECT nvl(单位 '合计') 单位,
           产品名称,
           SUM(数量) 数量
    FROM   c
    GROUP  BY ROLLUP(产品名称, 单位)
      

  8.   

    如果统计的数据量大并且计算相对复杂,用rollup效率远远高于用union的,union其实做了2次重复的运算,这点看执行计划就可以看出来了
      

  9.   

    我的是8i
    SELECT decode(GROUPING(单位), 1, '合计', 单位) 单位,
           产品名称,
           SUM(数量) 数量
    FROM   c
    GROUP  BY ROLLUP(产品名称, 单位)
    HAVING GROUPING(单位) + GROUPING(产品名称) <> 2这个没问题。
    我还想得到c表的其他相关字段,比如产品规格、单价等字段,在上面的sql语句中如何修改。我搞了好一阵了,搞不出来啊,不知道该在什么地方加进其他对计算,排序没有影响的字段。
      

  10.   

    这样试试:
    SELECT decode(GROUPING(单位), 1, '合计', 单位) 单位,
           产品名称,
           SUM(数量) 数量,
           decode(GROUPING(单位), 1, '产品备注', MAX(产品备注)) 产品备注,
           decode(GROUPING(单位), 1, '单价', MAX(单价)) 单价
    FROM   c
    GROUP  BY ROLLUP(产品名称, 单位)
    HAVING GROUPING(单位) +  GROUPING(产品名称) <> 2