删除空值较少的重复项

用户3788671

我有一张雇员表,其中包含约25列。现在有很多重复项,我想尝试摆脱其中一些重复项。

首先,我想通过查找在名字,姓氏,员工编号,公司编号和状态中具有相同值的多个记录来查找重复项。

SELECT
    firstname,lastname,employeenumber, companynumber, statusflag
FROM
    employeemaster
GROUP BY
    firstname,lastname,employeenumber,companynumber, 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,1,'JJONES','PHX'),
    ('Jake','Jones',1234,1,1,NULL,'PHX'),
    ('Jake','Jones',1234,1,1,NULL,NULL),
    ('Jane','Jones',5678,1,1,'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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

删除重复项后数组为空

来自分类Dev

如果另一列中的值为空,则删除重复项-Pandas

来自分类Dev

如何删除重复的值(空值除外)?

来自分类Dev

从行中的值中删除重复项

来自分类Dev

在字典中按值删除重复项

来自分类Dev

在字典中按值删除重复项

来自分类Dev

熊猫:根据行值删除重复项

来自分类Dev

在字典中按值删除重复项

来自分类Dev

从字典中按值删除重复项

来自分类Dev

删除重复项但保留 R 中的值

来自分类Dev

根据特定列值删除重复项

来自分类Dev

删除重复项后替换列值

来自分类Dev

根据 2 行值删除重复项

来自分类Dev

删除添加空值的Javascript对象项

来自分类Dev

从选择标签中删除重复的空值

来自分类Dev

删除重复行的列值为零的重复项

来自分类Dev

根据通用值和不同值删除重复项

来自分类Dev

在忽略熊猫中的空值的同时标记重复项

来自分类Dev

在Google脚本中使用空值替换重复项

来自分类Dev

想要以较少的空值查看数据

来自分类Dev

按索引删除重复项,在重复项中保留每列的最大值

来自分类Dev

从字典中某个键的值列表中删除重复项?

来自分类Dev

XSLT 1.0删除元素值中的重复项

来自分类Dev

使用jq删除JSON值中的重复项

来自分类常见问题

按值从KeyValuePair列表中删除重复项

来自分类Dev

Pandas / Python根据特定的行值删除重复项

来自分类Dev

返回唯一值而不删除重复项-C#

来自分类Dev

从数组中删除重复项,保留一些值

来自分类Dev

从列表中删除唯一值,仅保留重复项