如何根据不同标准的 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 列出重复项的主要内容,如果未能解决你的问题,请参考以下文章