表1:
名称   数量  使用地点  类别
A      2     N1      CATE1
B         1         N2      CATE1
A         1         N2      CATE1形成如下汇总表:
名称   总数    N1所有数量     N2所有数量
A       3          2            1
B       1          0            1说明:使用地点只有2个,物品有许多,根据表1汇总出每一物品的总量及各个地点的数量,请指教.

解决方案 »

  1.   

    select 名称, 
    总数 = sum(数量),
    N1所有数量 = sum(case when 使用地点 = 'N1' then 数量 else 0 end),
    N2所有数量 = sum(case when 使用地点 = 'N2' then 数量 else 0 end)
    from 表1
    group by 名称
      

  2.   

    这个有点麻烦,因为n不确定,要动太产生n,要用游标循环,或用其它手段,比如插入临时表时生成的唯一标识(identity(int))用来当作记录指针标识用。然后再统计出各个N的数量。难度不是很大,就是麻烦,其实最主要的是没有钱,我就不写了。
      

  3.   

    -- 测试数据
    CREATE TABLE 表1(名称 varchar(10), 数量 int, 使用地点 varchar(10), 类别 varchar(10))
    INSERT 表1 select 'A',2,'N1','CATE1'
    union all select 'B',1,'N2','CATE1'
    union all select 'A',1,'N2','CATE1'
    go--查询
    select 名称, 
    总数 = sum(数量),
    N1所有数量 = sum(case when 使用地点 = 'N1' then 数量 else 0 end),
    N2所有数量 = sum(case when 使用地点 = 'N2' then 数量 else 0 end)
    from 表1
    group by 名称
    godrop table 表1-- 结果
    名称         总数          N1所有数量      N2所有数量
    ---------- ----------- ----------- -----------
    A          3           2           1
    B          1           0           1(2 行受影响)
      

  4.   

    create table tbl(cname nvarchar(10),amount int,address nvarchar(30),type nvarchar(10))
    insert into tbl select 'a',2,'n1','cate1'
    union all select 'b',1,'n2','cate1'
    union all select 'a',1,'n2','cate1'
    select cname,sum(amount) as amount,sum(case address when 'n1' then amount else 0 end ) as address1,sum(case address when 'n2' then amount else 0 end ) as address1,type from tbl
    group by cname,type
    --------------------------
    a 3 2 1 cate1
    b 1 0 1 cate1
      

  5.   

    SQL server版回答问题真是快,要是Oracle版也有这么快就好了
      

  6.   

    create table t(名称 varchar(10),数量 int,使用地点 varchar(20),类别 varchar(20))
    insert t select 'A',2,'N1','CATE1'
    union all select 'B',1,'N2','CATE1'
    union all select 'A',1,'N2','CATE1'
    declare @s varchar(8000)
    set @s='select 名称,sum(数量)总数'
    select @s=@s+',['+使用地点+'所有数量]=sum(case 使用地点 when '''+使用地点+''' then 数量 else 0 end)' from t group by 使用地点
    exec(@s+' from t group by 名称')
      

  7.   

    Oracle曲高和寡,用的人少自然人气不足^^