我有一个SQL Server数据库,有重复的记录与略有不同的文件名。如果存在重复,则文件名的一部分将与之匹配,因此使用了crazy substring函数。我正试图写一个查询来查找和排除重复的记录,但我不确定我是否在正确的轨道上。
我试图匹配的示例-文件名的粗体部分。我无法找到以'。csv . csv '结尾的记录,因为并非所有这些记录都是重复的。最后,我希望从报表中排除重复项:
125648FILENAME_2021-01-011. csv
876765FILENAME_2021-01-01.CSV1.CSV
到目前为止我写的是:
SELECT
f.fileName, f.Date,
(SELECT
COUNT(CASE
WHEN f.fileName LIKE '%LEFT(SUBSTRING(f.fileName,8,len(f.fileName)),len(SUBSTRING(f.fileName,8,len(f.fileName)))-3)%'
THEN 1 ELSE 0 END)) 'Count of Duplicates'
FROM
database f
GROUP BY
f.fileName, f.Date
ORDER BY
'Count of Duplicates' DESC;
我在想我可以计数重复,以知道所讨论的文件有一个匹配,但可能有一个更好的方法。我也试过使用HAVING f.fileName LIKE '%LEFT(SUBSTRING(f.fileName,38,len(f.fileName)),len(SUBSTRING(f.fileName,38,len(f.fileName)))-3)%' > 1
.
如果您的所有记录模式都像样本一样,(文件名的期望部分从第八个索引开始)
;WITH xQ
AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY f.fileName,f.[DATE]) AS Id,
SUBSTRING(f.fileName,8,PATINDEX('%.%',f.fileName)-8) AS C
FROM @database F
)
SELECT *
FROM
(
SELECT C,
(SELECT COUNT(1)
FROM xQ
WHERE
xQ.Id <> MainQ.Id
AND xQ.C LIKE '%'+MainQ.C+'%') AS DuplicateCount
FROM xQ AS MainQ
) AS FinalQ
WHERE DuplicateCount>0