我有一个表4列code1,code2,code3和code4
所以那些可以包含如下数据(显示以下2条记录)
code1=xy code2=yz code3='' code4=''
code1=xy code2='' code3=yz code4=''
我们需要将2记录作为重复记录,因为它包含分散在不同列上的相同数据。请帮帮我
答案 0 :(得分:0)
你在这里所拥有的是一个多对一的关系,有人将这种关系变成了一个单独的表,这会产生比它解决的问题更多的问题。
我建议您修改架构,然后您就能更轻松地解决此类问题。
例如,如果列code1,code2,code3和code4在employee表上,如下所示:
employee table
|employeeid |name |code1 |code2 |code3 |code4 |
|1 |bob |xy |yz | | |
|2 |sam |xy | |yz | |
然后,您可以将数据重组为两个表:
employee table
|employeeid |name |
|1 |bob |
|2 |sam |
code table
|employeeid |code |
|1 |xy |
|1 |yz |
|2 |xy |
|2 |yz |
这样可以更容易地找到具有相同代码的人(并删除可能有四个代码的任意限制)
答案 1 :(得分:0)
如果您不关心列的排序,可以通过以下方式获取唯一值:
select distinct x.*
from t cross apply
(select max(case when seqnum = 1 then col end) as col1,
max(case when seqnum = 2 then col end) as col2,
max(case when seqnum = 3 then col end) as col3,
max(case when seqnum = 4 then col end) as col4
from (select col, row_number() over (order by col desc) as seqnum
from (values (col1), (col2), (col3), (col4)) v(col)
) x
) x
答案 2 :(得分:0)
您可以使用此功能查找重复值
Detect duplicate items in recursive CTE
WITH cte AS (
SELECT ROW_NUMBER()OVER(PARTITION BY [FieldName] ORDER BY [FieldName])[Rank],*
FROM TableName)
SELECT *
FROM cte
WHERE cte.[Rank]>1