有表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语句该怎么写呢?
名称 数量 单价 金额 备注
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语句该怎么写呢?
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
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
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