sql-server - SQL Server 重复删除

标签 sql-server duplicate-data

SQL Server 2008,我继承了这样的表(74k 行):

create table #mess (keycol char(36) , name1 varchar(254) , name2 varchar(254), valuex varchar(254) )
insert into #mess values ('971EC307-8514-450D-AE3A-4E25EA3F3A10' , 'a' , '' , '' )
insert into #mess values ('971EC307-8514-450D-AE3A-4E25EA3F3A10' , '' , 'a' , 'value-a' )
insert into #mess values ('04FD0C0B-FC90-405A-BFD6-C3AF2516E51F' , 'b' , '' , 'value-b' )
insert into #mess values ('578F2893-15E6-4877-9FE6-AC2F4F351143' , 'c' , '' , 'value-c' )
insert into #mess values ('04FD0C0B-FC90-405A-BFD6-C3AF2516E51F' , '' , 'b' , '' )
insert into #mess values ('FAFCBDFE-D49E-4566-882D-0B6628DA59CC' , '' , 'd' , 'value-d' )

这使得这个结果集:
keycol                               name1   name2    valuex
------------------------------------ ------- -------- ------------
971EC307-8514-450D-AE3A-4E25EA3F3A10 a                
971EC307-8514-450D-AE3A-4E25EA3F3A10         a        value-a
04FD0C0B-FC90-405A-BFD6-C3AF2516E51F b                value-b
578F2893-15E6-4877-9FE6-AC2F4F351143 c                value-c
04FD0C0B-FC90-405A-BFD6-C3AF2516E51F         b        
FAFCBDFE-D49E-4566-882D-0B6628DA59CC         d        value-d

我需要这样做(基于 keycol 何时在两行之间匹配,并根据 name1 何时在两行之间匹配,并使用 name2 来制作它,反之亦然,但始终使用 name1 并始终使用非空 valuex 列)。所有的想法都表示赞赏。

谢谢。
keycol                               name1   valuex
------------------------------------ ------- ------------
971EC307-8514-450D-AE3A-4E25EA3F3A10 a       value-a
04FD0C0B-FC90-405A-BFD6-C3AF2516E51F b       value-b
578F2893-15E6-4877-9FE6-AC2F4F351143 c       value-c
FAFCBDFE-D49E-4566-882D-0B6628DA59CC d       value-d

最佳答案

顺便说一句——右边的 3 列基本上是相同的。您可以不加惩罚地删除最右边的值(例如“value-a”等值),然后将其他两个组合起来。

无论如何 - 几种不同的方式 - 使用 DISTINCT 或 GROUP BY 来获得你想要的:

使用 DISTINCT:

SELECT DISTINCT
   keycol, 
   Coalesce(NULLIF(name1,''), name2) as name1,
   'Value-' + Coalesce(NULLIF(name1,''), name2) as valuex
FROM
   Table

使用 GROUP BY:
SELECT
   keycol, 
   Coalesce(max(nullif(name1,'')), max(name2)) as name1,
   max(valuex)
FROM
   table
Group By
   keycol

关于sql-server - SQL Server 重复删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6819033/

相关文章:

sql - 如何获取对sql server中特定sp具有执行权限的用户?

sql - 如何在 SQL 中使用 NULL 或空字符串

c++ - 如果键已经存在,为什么 STL 映射会插入另一个值,而不仅仅是更改它?

php - 在 PHP/Mysql 中打印重复记录

r - 查找近似重复记录的技术

mysql - 列的重复记录

unix - 如何用AWK删除部分重复行?

sql-server - 无法连接到 Azure 网络中的 SQL

sql-server - IN 子句,TSQL/SQL Server 中的 NULL 处理?

sql-server - 使用规范化表真的更好吗?