各位请教一下,我目前在开发中遇到一个问题:
select 商品编号,sum(商品数量) as 总量 from table where 所在仓库='1'  group by  商品编号
如我有一张表里面有商品编号,所在仓库,数量.....如下
商品编号 数量 所在仓库
a         1       1
a         2       1 
b         1       2
我执行这条语句后希望返回所有的商品数目也就是这样商品编号 数量 所在仓库
a          3       1
b          0       1我尝试过group by all 可是oracle好像不支持,请问各位我应该怎么写这个SQL语句?

解决方案 »

  1.   


    select 商品编号,
    sum(decode(所在仓库,'1',商品数量,0)) as 总量,
    1 所在仓库
    from table 
    group by 商品编号
      

  2.   

    create table testTab
    (
      id varchar(10),
      num number,
      ran number
    )insert into testTab (id,num,ran) values('a',1,1);
      insert into testTab (id,num,ran) values('a',2,1);
      insert into testTab (id,num,ran) values('b',2,2);
      insert into testTab (id,num,ran) values('a',2,2);
      
      
      select id,
          sum(decode(ran,ran,num)) as 总量,
          ran 所在仓库
      from testTab 
      group by id,ran行列转换
      

  3.   


    --你应该有一个 仓库表 和 一个 商品总表 吧,要不然这个设计就太2了
    --假设 仓库表为 t1 商品总表为 t2 (如果没有 你就自己建俩 维护一下,要不然你要的效果没办法达到)
    WITH TMP AS
     (SELECT T1.商品编号, T2.仓库编号
        FROM T1, T2 --笛卡尔积,构造全部商品在每个仓库的分配表
      ) TMP2 AS
     (SELECT 商品编号, SUM(商品数量) AS 总量, 所在仓库
        FROM TABLE
       WHERE 所在仓库 = '1'
       GROUP BY 商品编号)
    SELECT TMP.商品编号, NVL(TMP2.总量, 0), T2.仓库编号 AS 所在仓库
      FROM TMP
      LEFT JOIN TMP1
        ON TMP.商品编号 = TMP1.商品编号
       AND TMP.仓库编号 = TMP1.仓库编号
    ;
      

  4.   

    select 商品编号,sum(商品数量) as 总量,所在仓库 from table where 所在仓库='1' group by 商品编号,所在仓库
    这样不就可以了?
    可能有些商品不会在同一个仓库吧。。
      

  5.   

    select 商品编号,sum(数量),所在仓库 from t where 所在仓库='1' group by 商品编号,所在仓库;