如何根据不同标准的 T-SQL 列出重复项

Posted

技术标签:

【中文标题】如何根据不同标准的 T-SQL 列出重复项【英文标题】:How to list duplicates based on different criteria's T-SQL 【发布时间】:2022-01-07 09:07:33 【问题描述】:

我正在寻找可以帮助我完成一项非常具体的任务的人。

我正在分析计算机硬盘驱动器中的数据,并且需要能够列出从 .zip 文件中提取后重复的文件夹。以下是我正在处理的数据示例:

ItemName Extension ItemType
MyZipFolder.zip .zip File
MyZipFolder null Folder
PersonalDocuments.zip .zip File
PersonalDocuments null Folder

正如您所见,扩展名“.zip”包含在“ItemName”和“Extension”列中。当从 .zip 文件中提取时,它会变成一个文件夹。我需要一种列出 .zip 文件或提取后它变成的文件夹的方法(两者都可以,只需要在知道它是重复的情况下列出它)。

需要注意的是,我的数据包含许多其他文件夹和具有不同扩展名的文件,例如'.docx', '.msg' 所以查询需要打折这些。

我希望这是有道理的 - 谢谢!

预期的输出可能如下所示:

ItemName Extension ItemType
MyZipFolder null Folder
PersonalDocuments null Folder

所以我知道的所有文件夹的列表在数据中有一个 .zip 等价物。

【问题讨论】:

我不明白你想要什么,你能根据你的样本数据举一个例子(预期输出)吗? 嗯,文件夹名可以像 'Myzipfolder.zip` 仍然是文件夹,你必须找到另一种方式来区分它们 提问时,您需要提供minimal reproducible example: (1) DDL 和样本数据填充,即 CREATE 表和 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上述#1 中的样本数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。 @James 我已经输入了预期的输出,我不知道这是否有帮助? @eshirvana 在我拥有的数据中,所有 .zip 文件都有一个 File 的“ItemType” 【参考方案1】:

还不确定,但你的意思是这样的吗?

select *
from your_table y
where ItemType = 'Folder'
  and exists (
    select 1 from your_table yy
    where yy.Extension = '.zip'
      and yy.ItemName = y.ItemName + '.zip'
  )

【讨论】:

这正是我正在寻找的 - 谢谢 :) 感谢@Charlieface,我将更改查询以使其可搜索【参考方案2】:

我想我得到了你需要的东西:

select ItemName 
from tablename
group by replace(ItemName, isnull(Extension,''))
having case count(case when Extension = '.zip' then 1 end) > 1

【讨论】:

以上是关于如何根据不同标准的 T-SQL 列出重复项的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL:删除所有重复的行但保留一个[重复]

Python - 如何根据单元格从 CSV 中删除重复的单元格/行

联合所有但只保留 T-SQL 中一张表的重复项

如何使用两个键删除数组中的重复项?

在SQL左联接中删除重复项

如何检测此方案中的重复项,以解释内部差异?