SQL SERVER怎么去掉重复数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL SERVER怎么去掉重复数据?相关的知识,希望对你有一定的参考价值。
现在我的一个表A中,有两行完全一样的数据,是手动插进去的,我想找出所有两条完全一样的数据,然后删除一条,保留一条,该怎么做?
首先,你的表设计就有问题。存在两行完全相同的数据。在设计表时,要设计一个primary key,主键。在维护数据方面,比较方便。你用临时表,表变量的方式临时存储数据。再更新表内容。
用关键字distinct过滤掉重复的记录
select distinct * #t from a
insert into a
select * from #t
drop table #t
这样能除去重复的数据。
根据你的描述,group by 都不用了。 参考技术A 只进行一步操作是不太可能,借助临时表吧
create table table_tmp as select 字段1,字段2,字段3,字段4 from tablename group by 字段1,字段2,字段3,字段4;
然后清楚原表数据
truncate table tablename;
然后将临时表数据插入
insert into tablename select * from table_tmp
字段1,2,3,4是我起的,你表里有几个字段你写几个字段好了本回答被提问者采纳 参考技术B 1.按原表的表结构建个新的临时表
2.将原表中的重复数据各插入一条至临时表
insert into Tb_tmp select 字段1,字段2,字段3,……字段n from 表A group by 字段1,字段2,字段3,……字段n having count(*)>1
3.删除原表中的重复数据
4.将临时表数据导入至原表。 参考技术C 因为不知道你A表的字段。这里假如A表有字段ID,Name,Age
如果 Name,Age重复,要去掉重复的
Delete T From
(Select Row_Number() Over(Partition By Name,Age ORDER BY ID ASC) As RowNumber From A) T
Where T.RowNumber > 1
有哪些字段重复就用这些字段分组。就是Partition 后面的字段。 参考技术D 设置一个除id之外唯一的字段,就可以有效避免这种问题
SQL Server去重和判断是否为数字
sql 语句查询时去掉重复项:
使用 distinct 去掉重复项:
首先可以明确的看到存在重复的名字,那么接下来就让我们试试使用 distinct 去重吧。
1 select distinct * from Student
咦,怎么没效果呢?原来,distinct 是根据所查询的字段去重的。* 表示所有的字段,可以明确的看到字段 S_Id 和 S_StuNo 是不可能有重复的,因为一个为主键和自增长的标识列,一个有 unique (唯一)的约束。
既然明白了这一点,那下面就根据 S_Name,S_Sex,S_Height 这三个字段去重吧:
1 select distinct S_Name,S_Sex,S_Height from Student
sql判断字符串是否为数字:
方法一: 使用sql server的内置函数 ISNUMERIC():
1 select ISNUMERIC(\'123\') -- 返回 1 2 select ISNUMERIC(\'123.12\') -- 返回 1 3 select ISNUMERIC(\'a123.12\') -- 返回 0 4 select ISNUMERIC(\'abc\') -- 返回 0
函数 ISNUMERIC() 返回结果为 1 表示全是数字,结果为 0 表示有除了数字的其他字符,但是“.”(小数点也会被当做其中一部分)。
方法二: 匹配字符串中是否存在除了数字之外的其他字符(小数点也算作其他字符)
1 if((\'123\' not like \'%[^0-9]%\')) -- 数字 2 begin 3 select \'数字\' 4 end 5 else 6 begin 7 select \'非数字\' 8 end 9 10 if((\'a123\' not like \'%[^0-9]%\')) -- 非数字 11 begin 12 select \'数字\' 13 end 14 else 15 begin 16 select \'非数字\' 17 end 18 19 if((\'123.1\' not like \'%[^0-9]%\')) -- 非数字 20 begin 21 select \'数字\' 22 end 23 else 24 begin 25 select \'非数字\' 26 end
当然,我们也可以根据这种方式,定义一个自定义函数,这个后面再说。
sql 查询出某字段出现最多次数的值:
1 -- 查询出表 Student 中名字(S_Name)出现次数最多的名字 2 select top 1 S_Name,COUNT(1) from Student group by S_Name order by COUNT(1) desc
sql server [case when then else end]:
1 select S_StuNo 学号,S_Name 姓名, 2 case S_Sex when \'男\' then \'男生\' when \'女\' then \'女生\' else \'保密\' end 性别, -- 方式一 3 case when S_Sex=\'男\' then \'男生\' when S_Sex=\'女\' then \'女生\' else \'保密\' end 性别, -- 方式二 4 S_Height 身高 5 from Student
sql OBJECT_ID、OBJECT_NAME、OBJECT_DEFINITION:
1 if (OBJECT_ID(\'Student\') is not null) --判断是否存在 Student 这个表 2 begin 3 select \'表已存在\' 4 end 5 else 6 begin 7 select \'表不存在,请创建\' 8 end 9 10 --指定一个临时表名,则必须在临时表名前面加上数据库名,例如: 11 IF OBJECT_ID(\'tempdb..#table1\') is not null --判断临时表 table1 是否存在, 12 select \'表已存在\' 13 else 14 select \'表不存在,请创建\' 15 16 select OBJECT_ID(\'Student\') -- 返回 245575913 根据对象名称返回对象ID 17 18 select OBJECT_NAME(\'245575913\') -- 返回 Student 根据对象ID返回对象名称 19 20 select OBJECT_DEFINITION(\'245575913\') --返回对象的源文本 21 22 select OBJECT_DEFINITION(OBJECT_ID(\'Student\'))
示例,返回系统存储过程 sys.sp_columns
的定义:
1 SELECT OBJECT_DEFINITION (OBJECT_ID(N\'sys.sp_columns\'));
OBJECT_ID语法: OBJECT_ID ( \'[ database_name . [ schema_name ] . | schema_name . ] object_name\' [ ,\'object_type\' ] )
参数:
\' object_name \' (必填)
是要使用的对象。 object_name是varchar或nvarchar。 如果object_name是varchar,它将隐式转换为nvarchar。 可以选择是否指定数据库和架构名称。
\' object_type \' (可选)
架构范围的对象类型。 object_type是varchar或nvarchar。 如果object_type是varchar,它将隐式转换为nvarchar。
返回类型:
return int
PS:对于空间索引,OBJECT_ID 返回 NULL。出现错误时,返回 NULL。
OBJECT_NAME语法: OBJECT_NAME ( object_id [, database_id ] )
参数:
\' object_id \' (必填)
要使用的对象的 ID。 object_id是int ,假定在指定的数据库中,或在当前数据库上下文中为架构范围的对象。
\' database_id \'(可选)
要在其中查找对象的数据库的 ID。 database_id是int。
返回类型:
return nvarchar(max)
PS:出现错误时或调用方没有查看对象的权限时,将返回 NULL。 如果目标数据库的 AUTO_CLOSE 选项设置为 ON,则此函数将打开此数据库。
用户只能查看符合如下条件的安全对象的元数据:该安全对象为该用户所有,或已授予该用户对该安全对象的权限。
也就是说,如果用户对该对象没有任何权限,则那些会生成元数据的内置函数(如 OBJECT_NAME)可能返回 NULL。
OBJECT_DEFINITION语法:OBJECT_DEFINITION ( object_id )
参数:
\' object_id \' (必填)
要使用的对象的 ID。 object_id是int,和假定以表示当前的数据库上下文中的对象。
返回类型:
return nvarchar(max)
PS:出现错误时或调用方没有查看对象的权限时,将返回 NULL。
参考:
https://msdn.microsoft.com/zh-cn/library/ms176090.aspx
以上是关于SQL SERVER怎么去掉重复数据?的主要内容,如果未能解决你的问题,请参考以下文章
sqlserver根据某一个字段进行求和运算后去掉重复的数据