表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汇总出每一物品的总量及各个地点的数量,请指教.
名称 数量 使用地点 类别
A 2 N1 CATE1
B 1 N2 CATE1
A 1 N2 CATE1形成如下汇总表:
名称 总数 N1所有数量 N2所有数量
A 3 2 1
B 1 0 1说明:使用地点只有2个,物品有许多,根据表1汇总出每一物品的总量及各个地点的数量,请指教.
总数 = sum(数量),
N1所有数量 = sum(case when 使用地点 = 'N1' then 数量 else 0 end),
N2所有数量 = sum(case when 使用地点 = 'N2' then 数量 else 0 end)
from 表1
group by 名称
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 行受影响)
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
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 名称')