有表table_A
名称   数量    单价   金额       备注
a      1       15.00  15.00      原价
b      2       15.00  15.00      
a      3       10.00  30.00      降价问题1:
结果要把数量、金额两个字段进行合计,并且备注在有同样名称的时候,取第一次的值,得到结果:
名称   数量   金额   备注
a      4      45.00  原价
b      2      15.00问题2:
结果要把数量、金额两个字段进行合计,并且备注在有同样名称的时候,取每次的值串联,得到结果:
名称   数量   金额   备注
a      4      45.00  原价,降价
b      2      15.00关键是备注字段,数量金额合计已经有人指点用
select 名称,sum(数量) as 数量,sum(金额) as 金额 from table_A group by 名称
请问SQL语句该怎么写呢?

解决方案 »

  1.   

    2。
    create table tb (名称 varchar(10),数量 int,单价 dec(10,2),金额 dec(10,2),备注 varchar(20)) insert into tb select  'a',1,15.00,15.00,'原价'
    union all select 'b',2,15.00,15.00,''
    union all select 'a',3,10.00,30.00,'降价'
    gocreate function dbo.fc_str(@name varchar(10))
    returns varchar(100)
    as
    begin
     declare @sql varchar(1000)
     set @sql=''
     select @sql=@sql+','+cast(备注 as varchar) from tb where 名称=@name
     return stuff(@sql,1,1,'')
    end
    goselect 名称,sum(数量) as 数量,sum(金额) as 金额,dbo.fc_str(名称) as 备注 from tb group by 名称
    drop table tb
    drop function dbo.fc_str
      

  2.   

    1。
    create table tb (名称 varchar(10),数量 int,单价 dec(10,2),金额 dec(10,2),备注 varchar(20)) insert into tb select  'a',1,15.00,15.00,'原价'
    union all select 'b',2,15.00,15.00,''
    union all select 'a',3,10.00,30.00,'降价'
    go
    select a.名称,sum(a.数量) as 数量,sum(a.金额) as 金额,b.备注 from tb a,(select top 1 备注,名称 from tb group by 名称,备注) b where a.名称*=b.名称 group by a.名称,b.备注 order by a.名称drop table tb
      

  3.   

    --问题1处理:
    create table 价格表(名称 varchar(10),数量 int,单价 dec(10,2),金额 dec(10,2),备注 varchar(20)) 
    insert 价格表 values('a',1,15.00,15.00,'原价')
    insert 价格表 values('b',2,15.00,15.00,'')
    insert 价格表 values('a',3,10.00,30.00,'降价')
    go
    --select *from 价格表
    select a.名称,sum(a.数量) as 数量,sum(a.金额) as 金额,b.备注 from 价格 a,(select top 1 备注,名称 from 价格表 group by 名称,备注) b where a.名称*=b.名称 group by a.名称,b.备注 order by a.名称
    drop table 价格表--问题2处理:
    create table 价格表 (名称 varchar(10),数量 int,单价 dec(10,2),金额 dec(10,2),备注 varchar(20)) 
    insert 价格表 values('a',1,15.00,15.00,'原价')
    insert 价格表 values('b',2,15.00,15.00,'')
    insert 价格表 values('a',3,10.00,30.00,'降价')
    go
    --select *from 价格表
    create function dbo.fc_str(@name varchar(10))
    returns varchar(100)
    as
    begin
     declare @sql varchar(1000)
     set @sql=''
     select @sql=@sql+','+cast(备注 as varchar) from 价格表 where 名称=@name
     return stuff(@sql,1,1,'')
    end
    go
    select 名称,sum(数量) as 数量,sum(金额) as 金额,dbo.fc_str(名称) as 备注 from 价格表 group by 名称drop table 价格表
    drop function dbo.fc_str