问题:
  用SQL语句把操作表变成结果集。
操 作 表:
-------------------------------------------------------------
商品编号 商品名称 商品分类 单位 仓库 数量|P0001|  |华硕主板| |电脑类| |件| |仓库1| |80 |
|P0001|  |华硕主板| |电脑类| |件| |仓库2| |100|
|P0002|  |搬手|         |五金类| |件| |仓库2| |300|
-------------------------------------------------------------
结 果 集:
-------------------------------------------------------------
商品编号 商品名称 商品分类 单位 仓库1 仓库2|P0001|  |华硕主板| |电脑类| |件| |80| |100|
|P0002|  |搬手|         |五金类| |件| |  | |300|
-------------------------------------------------------------提示,仓库可以是任意多个,但结果集中都会把每一个仓库变成一个字段。

解决方案 »

  1.   

    采用SQL子查询,多看看帮助,解决方法如下:select 商品编号,商品名称,商品分类,单位,(select sum(数量) as 仓库1 from table1 where table1.商品编号=a.商品编号 and table1.仓库='仓库1')  as 仓库1
    ,(select sum(数量) as 仓库1 from table1 where table1.商品编号=a.商品编号 and table1.仓库='仓库2')  as 仓库2
     from table1 as a group by 商品编号,商品名称,商品分类,单位
      

  2.   

    你用的是SQL server2000吗?
    如果是:
    select 商品编号, 商品名称,商品分类,单位,
     sum( case 仓库 when 仓库1 then 数量 else 0 end) 仓库1,
     sum( case 仓库 when 仓库2 then 数量 else 0 end) 仓库2
    group by 商品编号, 商品名称,商品分类,单位
      

  3.   

    仓库名称是一个字段值而不是已知的,所以这样是不可行的。如果在仓库表中新增一个仓库,那么这个SQL将不能统计完整新的仓库的产品库存资料。
      

  4.   

    这是在ACCESS下实现该问题的SQL语句,因为现在要把它弄成SQL版,所以不得不这样做,存诸过程序又比较麻烦。/*TRANSFORM Sum(K.Number) 
      SELECT W.ID,W.UserCode,W.Name,W.Sort,W.Unit 
      FROM WareStock AS K,Ware AS W,Depot AS D 
      WHERE K.WareID=W.ID and K.DepotID=D.ID 
      GROUP BY W.ID,W.UserCode,W.Name,W.Sort,W.Unit 
      PIVOT D.Name
      */
      

  5.   

    不管什么数据库,也不管有多少仓库,用程序来生成SQL如下:
    var
      s,c:string;
    begin
      S:='select 商品编号,商品名称,商品分类,单位,';
      c:='(select sum(数量) from 表 where 商品编号=A.商品编号 and 仓库=''%s'') %s ,'
      Query1.Close;
      Query1.Sql.Text:='select distinct 仓库 from 表';
      Query1.Open;
      IF Query1.RecordCount<=0 then exit;
      while not Query1.Eof do
      begin
        s:=s+Format(c,[Query1.FieldByName('仓库').AsString,
                 Query1.FieldByName('仓库').AsString]);
        Query1.Next;
      end;
      s:=copy(s,1,Length(s)-1); //去掉最后的','
      s:=s+ ' from 表 A';
    这样S最后得到的就是你要的SQL