sql – 删除空值较小的重复项
发布时间:2020-05-28 11:14:00 所属栏目:MsSql 来源:互联网
导读:我有一张员工表,其中包含大约25列.现在有很多重复,我想尝试摆脱一些重复. 首先,我想通过查找在名字,姓氏,员工编号,公司编号和状态中具有相同值的多个记录来查找重复项. SELECT firstname,lastname,employeenumber, companynumber, statusflagFROM employeemas
|
我有一张员工表,其中包含大约25列.现在有很多重复,我想尝试摆脱一些重复. 首先,我想通过查找在名字,姓氏,员工编号,公司编号和状态中具有相同值的多个记录来查找重复项. SELECT
firstname,lastname,employeenumber,companynumber,statusflag
FROM
employeemaster
GROUP BY
firstname,statusflag
HAVING
(COUNT(*) > 1)
这给了我重复,但我的目标是找到并保留最好的单个记录并删除其他记录. “最佳单条记录”由所有其他列中具有最少NULL值的记录定义.我怎样才能做到这一点? 我正在使用Microsoft SQL Server 2012 MGMT Studio. 例: 红色:删除 注意:表中列的列数多于此表所示的列数. 解决方法您可以使用sys.columns表获取列列表并构建动态查询.此查询将根据您给定的条件为您要保留的每条记录返回“KeepThese”值.-- insert test data
create table EmployeeMaster
(
Record int identity(1,1),FirstName varchar(50),LastName varchar(50),EmployeeNumber int,CompanyNumber int,StatusFlag int,UserName varchar(50),Branch varchar(50)
);
insert into EmployeeMaster
(
FirstName,LastName,EmployeeNumber,CompanyNumber,StatusFlag,UserName,Branch
)
values
('Jake','Jones',1234,1,'JJONES','PHX'),('Jake',NULL,NULL),('Jane',5678,'JJONES2',NULL);
-- get records with most non-null values with dynamic sys.column query
declare @sql varchar(max)
select @sql = '
select e.*,row_number() over(partition by
e.FirstName,e.LastName,e.EmployeeNumber,e.CompanyNumber,e.StatusFlag
order by n.NonNullCnt desc) as KeepThese
from EmployeeMaster e
cross apply (select count(n.value) as NonNullCnt from (select ' +
replace((
select 'cast(' + c.name + ' as varchar(50)) as value union all select '
from sys.columns c
where c.object_id = t.object_id
for xml path('')
) + '#',' union all select #','') + ')n)n'
from sys.tables t
where t.name = 'EmployeeMaster'
exec(@sql) (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server – 有没有办法在TSQL中生成表创建脚本?
- SQL Server 分页查询通用存储过程(只做分页查询用)
- sql-server – 获取SQL Server 2008中新插入行的主键
- MySQL主库binlog(master-log)与从库relay-log关系代码详解
- sql-server – SQL Server 2016 Express Management Studio
- Sql命名最佳实践
- .net – 必须断开连接的数据库应用程序的设计模式
- 数据库 – 存储唯一URL Slug的最佳方法是什么?
- 数据库 – Max Cardinality和Min Cardinality有什么区别?
- percona-toolkit之pt-kill 杀掉mysql查询或连接的方法
