首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

这个sql语句该如何写

2012-01-24 
这个sql语句该怎么写?表acodenamenumaa3ba5cd6dd7ee4在表a中,有这样的数据,现在要将相同name的code也改成

这个sql语句该怎么写?
表a
code       name       num
a             a                 3
b             a                 5
c             d                 6
d             d                 7
e             e                 4

在表a中,有这样的数据,现在要将相同name的code也改成相同的,然后把他们的num相加,即要得到这样的结果:
code       name       num
a             a                 8
c             d                 13
e             e                 4
该怎么操作呢?

[解决办法]
select name , min(code) code, sum(num) num from tb group by name
[解决办法]
update t
set
num=(select sum(num) from a where name=t.name)
from
a t
where
t.code=t.name

delete a where code <> name
[解决办法]
select code=min(code),[name],num=sum(num)
from 表a
group by [name]
[解决办法]
select name as code name,sum(num) from a group by a.name
[解决办法]
理解错了,修改一下:

update t
set
num=(select sum(num) from a where name=t.name)
from
a t

delete t from a t where exists(select 1 from a where name=t.name and code <t.code)
[解决办法]
create table tb(code varchar(10),name varchar(10),num int)

insert into tb values( 'a ', 'a ', 3)
insert into tb values( 'b ', 'a ', 5)
insert into tb values( 'c ', 'd ', 6)
insert into tb values( 'd ', 'd ', 7)
insert into tb values( 'e ', 'e ', 4)

select name , min(code) code, sum(num) num from tb group by name
drop table tb

/*
name code num
---------- ---------- -----------
a a 8
d c 13
e e 4

(所影响的行数为 3 行)
*/
[解决办法]
select name as First(code, "name ") name,sum(num) from a group by name
[解决办法]
--如果按照code的先后顺序,则可以像下面这样
declare @table table(code varchar(10),[name] varchar(10),num int)
insert into @table
select 'g ', 'a ',3
union all select 'b ', 'a ',5
union all select 'c ', 'd ',6
union all select 'd ', 'd ',7
union all select 'e ', 'e ',4
union all select 'a ', 'e ',4
union all select 'f ', 'c ',4

select b.code,b.name,sum(b.num)as num from


(select code=(case when exists(select 1 from @table where [name]=a.[name]and code <a.code)then
(select top 1 code from @table where [name]=a.[name]and code <a.code order by code)
else code end),[name],num
from @table a)b
group by b.code,b.name
order by b.code,b.name
/*结果
code name num
---------- ---------- -----------
a e 8
b a 8
c d 13
f c 4
*/

热点排行