2017-06-05 34 views
-2

我有一个订阅表。样品记录:在SQL Server中查找具有不同扩展名的dup记录

SUBS_ID | SUBS Name 
    1  | SC FORM 124 
    2  | SC FORM 124-R 

我需要找到两者的记录,作为预订名称是完全一样的,但只是一个扩展-R。

+0

你查询表中的所有记录中,其中SUBS名称带有或不带有“-R”相匹配?或者只是具有完全SUBS名称='SC FORM 124'或'SC FORM 124-R'的所有记录。 –

+0

嗨,欢迎来到SO。为了帮助我们需要关于您的表格,数据和您想要的输出的一些细节。看到这篇文章是一个很好的开始。 http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –

+0

您需要比较所有记录并返回?你能否提供更多数据和预期产出的例子? –

回答

1

非常糟糕的一次性的代码编写直奔这里和未经考验的,但是......

with cte As (Select Name, Id 
From Subs 
Where Name Not Like '%-R' 
) 
Select cte.Id, cte.Name, M.Name 
From Subs As M 
Join cte 
On cte.Name + '-R' = M.Name 
0

您可以通过如下使用ROW_NUMBER和分区:

Select * from (
    Select *, DupeRecords = Row_number() over(partition by replace([Subs Name],'-R','') order by Subs_Id) 
     from #yoursubs 
    ) a Where a.DupeRecords > 1 
0

根据您的最新标准:

因此,在上面的例子中,当我查询表中,我应该得到所有3 记录......第一个bei纳克库记录,其余2 是所述扩展 - SQL用户17分钟前

SELECT distinct 
    0 as Subs_ID 
    , CASE WHEN SUBS_Name like '%-%' THEN left(SUBS_Name,charindex('-',SUBS_Name)-1) ELSE SUBS_Name END AS SUB_NAME_MAIN 
    , '' as Extension 

FROM 
    subs 

UNION 

SELECT 
    Subs_ID 
    , CASE WHEN SUBS_Name like '%-%' THEN left(SUBS_Name,charindex('-',SUBS_Name)-1) ELSE SUBS_Name END AS SUB_NAME_MAIN 
    , CASE WHEN SUBS_Name like '%-%' THEN RIGHT(SUBS_Name, LEN(SUBS_Name) - charindex('-',SUBS_Name)+1) ELSE '' END AS Extension 

FROM 
    subs 

将产生以下结果。一个“主”行,其中的仲裁ID号为'0',并且该主人家族的每一行及其扩展名。

Subs_ID  SUB_NAME_MAIN  Extension 
----------- -------------------- -------------------- 
0   SC FORM 124   
1   SC FORM 124   
2   SC FORM 124   -R 
相关问题