Sql 查询以查找多列中的重复数据

Sql 查询以查找多列中的重复数据,sql,sql-server,duplicates,Sql,Sql Server,Duplicates,我是SQL新手,一直找不到任何文章来解释如何从票务系统中筛选数据以提取重复票证。我需要检查一家商店是否在同一天提交同一类别的多张门票。下面是我正在使用的示例。任何帮助都将不胜感激 USE [HelpDesk] declare @date1 date = '5-1-2017', @date2 date = '6-2-2017' SELECT [SectionName] ,[CategoryName] ,[RequesterName] ,[IssueDate] ,[StatusId] FRO

我是SQL新手,一直找不到任何文章来解释如何从票务系统中筛选数据以提取重复票证。我需要检查一家商店是否在同一天提交同一类别的多张门票。下面是我正在使用的示例。任何帮助都将不胜感激

USE [HelpDesk]
declare 
@date1 date = '5-1-2017',
@date2 date = '6-2-2017' 

SELECT  [SectionName]
,[CategoryName]
,[RequesterName]
,[IssueDate]
,[StatusId]
FROM [HelpDesk].[dbo].[uvTESTMasterQueryIssues]
WHERE [IssueDate] > @date1 AND [IssueDate] < @date2;

这是一个简单的查询,您可以使用Group by并获得您想要的结果

请参阅:

创建临时表

在温度值123、‘维护’、‘其他报警’、‘存储0009550’、‘2017-05-17’中插入 插入温度值124、‘维护’、‘其他报警’、‘存储0003561’、‘2017-05-17’中 插入温度值125、‘维护’、‘其他报警’、‘存储0009550’、‘2017-05-17’中 在温度值126、‘维护’、‘其他报警’、‘存储0003561’、‘2017-05-17’中插入 插入到温度值127、‘维护’、‘目标移动’、‘门店0003561’、‘2017-05-17’中 插入温度值128、‘维护’、‘其他报警’、‘存储0007426’、‘2017-05-17’中 在温度值129、“维护”、“目标移动”、“门店0007750”、“2017-05-17”中插入

从临时菜单中选择*

声明@date1日期='5-1-2017' 声明@date2日期='6-2-2017'

);以cts为例 选择 [类别名称] ,[IssueDate],请求者名称 临时工 其中,[IssueDate]介于@date1和@date2之间 按类别分组的名称,[IssueDate],请求者名称的计数*>1

从t.CategoryName=cts.CategoryName和t.IssueDate=cts.IssueDate和t.RequesterName=cts.RequesterName上的临时t内部联接cts中选择t.*按t.RequesterName、t.IssueID排序


drop table temp

我没有机会运行或试用它,但在SQL Server中应该是这样的:

-- Number of occurrences of Duplicate records
SELECT [SectionName]
    ,[CategoryName]
    ,[RequesterName]
    ,[IssueDate]
    ,[StatusId]
    ,COUNT(*) AS [NUMBER OF OCCURENCES]
FROM [dbo].[uvTESTMasterQueryIssues]
WHERE [IssueDate] > @date1
    AND [IssueDate] < @date2
GROUP BY [SectionName]
    ,[CategoryName]
    ,[RequesterName]
    ,[IssueDate]
    ,[StatusId]
HAVING COUNT(*) > 1
ORDER BY [SectionName]

您可以使用group by查找重复记录,例如,如果您希望根据类别和requesterName查找重复记录,则执行以下查询将得到结果:

SELECT  [CategoryName]
,[RequesterName]
,Count(*)
FROM [HelpDesk].[dbo].[uvTESTMasterQueryIssues]
WHERE [IssueDate] > @date1 AND [IssueDate] < @date2
GROUP BY
    RequesterName, CategoryName
HAVING 
    COUNT(*) > 1

MySQL和SQL Server是不同的。请删除您未使用的RDBMS。将Group By和Count1>1添加到Select语句添加som示例数据取决于IssueDate的数据类型(如果是DateTime),您需要强制转换为日期才能获得相同的日期。您的分组依据需要包含所有未聚合的列。但通过这种方式,您可以找到重复的记录,删除其他不需要的列。我遗漏了什么吗?请让我知道,这样我才能更好地理解您是否运行此代码?这将给出一个错误。这就是我要说的。如果你建议一个答案,请确保它运行没有错误。让我试试,并会更新你…给我一些时间。请共享您的创建表查询您的DML,以便我可以更好地测试。因为我没有正确的表模式,所以我没有执行它。只是给出过去使用的粗略想法。这不会给出OP想要的。他们想知道一个问题是否在同一天提交了不止一次。如果你删除了日期,那么你很可能会得到重复的日期,但可能是不同的日期。我知道你还不到50岁,但这是一个评论,不是答案。张贴代码的有效答案。获取他们的代码并使其为期望的结果工作。这样做你会得到更多的分数-
SELECT  [CategoryName]
,[RequesterName]
,Count(*)
FROM [HelpDesk].[dbo].[uvTESTMasterQueryIssues]
WHERE [IssueDate] > @date1 AND [IssueDate] < @date2
GROUP BY
    RequesterName, CategoryName
HAVING 
    COUNT(*) > 1