当前位置: 代码迷 >> Sql Server >> 如何样能达到这个效果
  详细解决方案

如何样能达到这个效果

热度:15   发布时间:2016-04-27 18:38:53.0
怎么样能达到这个效果
表A
客户 编号 货号 规格 数量 重量 物料 数量 单价 金额
 A 123 LH001 20*2 10 12 123-1 0.1 10 1
 A 123 LH001 20*2 23 11 123-1 2 15 30
 A 123 LH001 20*2 43 15 123-1 0.5 10 5
 B 567 LH003 10*5 10 21 321 1.1 10 11
 B 567 LH003 10*5 40 34 321 1.6 10 16



想达到以下这种效果

客户 编号 货号 规格 数量 重量 物料 数量 单价 金额
 A 123 LH001 20*2 10 12 123-1 0.1 10 1
 A 123 LH001 20*2 23 11 123-1 2 15 30
 A 123 LH001 20*2 43 15 123-1 0.5 10 5
合计 2.6 36
 B 567 LH003 10*5 10 21 321 1.1 10 11
 B 567 LH003 10*5 40 34 321 1.6 10 16
合计 2.7 27



行数都不固定的.按规格来求....麻烦各位了








------解决方案--------------------
小计与总计
SQL code
--小计与总计的汇总declare @t table(name varchar(20),Num int)insert into @t select 'a',1insert into @t select 'a',2insert into @t select 'b',3insert into @t select 'b',4select name=(case when name is null then 'total' else name end),Num from (SELECT name, SUM(Num) as Num,GROUPING(name) 'grp' FROM @tGROUP BY name WITH ROLLUP) t--实例declare @t table(单据编号varchar(10),商品编码varchar(10),商品名称varchar(10),进货数量int,成本价money,金额money)insert into @t select 'JH001','0001','营养快线',10,3.5,35insert into @t select 'JH001','0002','AD钙奶',5,6,30insert into @t select 'JH002','0001','营养快线',5,3.5,17.5insert into @t select 'JH002','0002','AD钙奶',30,6,180select 单据编号=case when n=1 then '总计' when s=1 then '小计' else  单据编号end,商品编码,商品名称,进货数量,成本价,金额from (select 单据编号,商品编码,商品名称,进货数量=sum(进货数量),成本价=sum(成本价),金额=sum(金额),GROUPING(单据编号)n,GROUPING(商品编码)s from @t group by 单据编号,商品编码,商品名称with rollup)awhere 商品名称is not null or n=1 or s=1
------解决方案--------------------
你的数据
SQL code
--> 测试数据: #T1if object_id('tempdb.dbo.#T1') is not null drop table #T1create table #T1 ([客户] varchar(1),[编号] int,[货号] varchar(5),[规格] varchar(4),[数] int,[重量] int,[物料] varchar(5),[数量] numeric(2,1),[单价] int,[金额] int)insert into #T1select 'A',123,'LH001','20*2',10,12,'123-1',0.1,10,1 union allselect 'A',123,'LH001','20*2',23,11,'123-1',2,15,30 union allselect 'A',123,'LH001','20*2',43,15,'123-1',0.5,10,5 union allselect 'B',567,'LH003','10*5',10,21,'321',1.1,10,11 union allselect 'B',567,'LH003','10*5',40,34,'321',1.6,10,16select 客户=case when n=1 then '总计' when s=1 then '小计' else  客户 end,编号,货号,规格,数,重量,物料,数量,单价,金额from (select 客户,编号,货号,规格,数,重量,物料,数量=sum(数量),单价=avg(单价),金额=sum(金额),GROUPING(客户)n,GROUPING(编号)s from #T1 group by 客户,编号,货号,规格,数,重量,物料with rollup) awhere 物料 is not null orn=1 or s=1drop table #T1/*客户   编号          货号    规格   数           重量          物料    数量                                      单价          金额---- ----------- ----- ---- ----------- ----------- ----- --------------------------------------- ----------- -----------A    123         LH001 20*2 10          12          123-1 0.1                                     10          1A    123         LH001 20*2 23          11          123-1 2.0                                     15          30A    123         LH001 20*2 43          15          123-1 0.5                                     10          5小计   NULL        NULL  NULL NULL        NULL        NULL  2.6                                     11          36B    567         LH003 10*5 10          21          321   1.1                                     10          11B    567         LH003 10*5 40          34          321   1.6                                     10          16小计   NULL        NULL  NULL NULL        NULL        NULL  2.7                                     10          27总计   NULL        NULL  NULL NULL        NULL        NULL  5.3                                     11          63*/
  相关解决方案