sql server同一个表中两行数据合并为一行。如表A: name age num ab

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server同一个表中两行数据合并为一行。如表A: name age num ab相关的知识,希望对你有一定的参考价值。

sql server同一个表中两行数据合并为一行。如表A:
name age num
ab 11 100
cd 11 200
ef 11 500
合并后的表A
ab 11 300
ef 11 500
说明:将表A中字段名为ad和cd的两行合并,其中的num是两行num之和,合并后的行name字段名是cd.

select name,age,sum(num)
from
(
select name=case when name='CD' then 'ab' else name end,age,num
from 表
) t1
group by name,age追问

您好,问下这个数据是更新了表吗,我的目的是更新后的数据存在表A.

追答

....以为你要查询,,,,要是更新的话就不能这样了,,,,
1、新增记录字段
alter table 表 add id varchar(100)
1、update 表 set name='ab',id='cd'
where name='cd'

2、update t1 set t1.num=t2.num
from 表 t1 inner join (select name,age,sum(num) num
from 表
group by name,age) t2 on t1.name=t2.name
where t1.name='ab'
3
DELETE FROM 表
where id='CD'
4
alter table 表 drop column id varchar(100)

哎,,,问题表述不请,,早知道打这么多字,,,就不回答了,,,

追问

谢谢啊。但是这t1是什么啊

追答

t1,t2是我给表起的表别名,,,为了不再打表名,也为了清晰,,,

例如表名字是xxxxxxxxxx,这样,太长,不想打,就写成xxxxxxxxxxxx t1,下面直接写t1就可以了

追问

您好,谢谢你昨天的解答,但是我今天试了下你那个并没有把num的和加起来,就是字段num的值没变啊,求助啊

参考技术A 你这个列子和你的说明也对不上啊亲
这个合并有规律吗?追问

最后合并后字段名是ab.写错了

SQL server约束

约束的概念:确保在列中输入有效的值并维护表之间的关系。


Primary key约束

功能:primary key(主键约束),一个表中只能有一个,不能有空值,不能有重复值.

创建表时定义约束:字段名 数据类型[长度] primary key

Unique约束
功能:unique(唯一约束), 指定在同一列中的两行不能有相同的值,只能有一行为空值。

创建表时定义约束:字段名 数据类型 unique

Default约束

功能:执行insert语句时将默认值自动插入约束所在的列

创建表时定义约束:字段名 数据类型 default 默认值
Default 约束注意事项
1、每列只能定义一个default约束。
2、不能用于有identity属性的列
3、如果定义的默认值长于其对应字段的允许长度,那么输入到表中的默认值将被截断。
4、有default约束的字段,可插入其他的值,若不插入, 则以默认值为纪录值,且后面创建的默认约束对已
经存在的数据没有影响.

Check约束
功能:check(检查约束),每次执行Insert/update语句时,该约束要校验数据的合法性。

创建表时定义约束:字段名 数据类型 check(条件)

Check约束注意事项
1、一个表中可以定义多个检查约束,但每个字段只 能定义一个检查约束。
2、当执行insert语句或者update语句时,检查约束 将验证数据。
3 、如果对已经有数据的表添加约束,可以用with nocheck避免对以前的数据做检查.

Foreign key 约束

功能:确保主关键字(主表中)和外关键字(辅表中)的关系。
创建表时定义约束:字段名 数据类型 foreign key(字段名) references 表名(字段名)
注意:foreign Key子句中指定的列数和数据类型必须和在references子句中的列数和数据类型匹配。且关联
的表的字段必须设置为主键.

修改约束
修改表时添加约束
alter table 表名
add constraint 约束名 primary key(字段名) –-主键
add constraint 约束名 unique (字段名) --唯一
add constraint 约束名 default(默认值) for 字段名 –默认
add constraint 约束名 check(条件) –检查
add constraint 约束名 foreign key(字段名) references 主键表(参照字段名) --外键
删除约束
语法:
alter table 表名 drop 约束名


【例】 删除 xs表的pk_xs约束。
alter table xs drop constraint pk_xs


注意:
1.要删除被约束的列,必须先删除约束
2.存在外键约束时,要删除主健,必须先删除对应的外键

 

以上是关于sql server同一个表中两行数据合并为一行。如表A: name age num ab的主要内容,如果未能解决你的问题,请参考以下文章

Oracle - 两个表中两行之间的差异或变化

sqlserver中找寻表中的某一行数据

sqlserver怎么将两行数据合并成一行

mysql 如何查找同一表中两行之间的差异并列出不匹配的记录? mysql在表中查找不匹配的行

关于SQL Server将一列的多行内容拼接成一行,合并显示在另外表中

获取内部连接表中两行的总和