Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server查找具有相同ID的重复日期_Sql_Sql Server 2005 - Fatal编程技术网

SQL Server查找具有相同ID的重复日期

SQL Server查找具有相同ID的重复日期,sql,sql-server-2005,Sql,Sql Server 2005,我正在使用SQL Server 2005,我有一个包含以下内容的表 [uniqueID] [requirementId] [number] [description] [dtmexecuted] [amount] 我需要找到所有具有相同requirementid和dtmexecuted的行。我试过了 select requirementid, dtmexecuted, count(*) from [MyTable] group by requirementid,

我正在使用SQL Server 2005,我有一个包含以下内容的表

[uniqueID] [requirementId] [number] [description] [dtmexecuted] [amount]
我需要找到所有具有相同requirementid和dtmexecuted的行。我试过了

select 
    requirementid, dtmexecuted, count(*) 
from 
    [MyTable]
group by 
    requirementid, dtmexecuted
having 
    count(*) > 1
order by 
    requirementid
但这并没有让我得到我需要的结果。这是我需要的一个例子

[FEE55DE4-F7AD-438F-83F5-0002C7DAF993] [3719D29C-8532-4128-BECA-F720106AE61B] [03] [desc] [2011-04-01 00:00:00.000] [900.00]

[BRW46DE4-F1GC-125C-51RC-3985G7CFF873] [3719D29C-8532-4128-BECA-F720106AE61B] [04] [desc 2] [2011-04-01 00:00:00.000] [1900.00]

我需要写一些东西,将这两行返回为具有相同的requirementid和dtmexecuted。

如果需要返回行,则需要使用窗口函数:

select [uniqueID], [requirementId], [number], [description], [dtmexecuted], [amount]
from (select t.*,
             count(*) over (partition by requirementid, dtmexecuted) as cnt
      from MyTable t
     ) t
where cnt > 1

如果需要返回行,则需要使用窗口函数:

select [uniqueID], [requirementId], [number], [description], [dtmexecuted], [amount]
from (select t.*,
             count(*) over (partition by requirementid, dtmexecuted) as cnt
      from MyTable t
     ) t
where cnt > 1

这是我解决这个问题的通常方法

select
  dest.*
from
  (
  select 
    requirementid,
    dtmexecuted,
    count(*) as RowCount
  from [MyTable]
  group by requirementid, dtmexecuted
  having count(*) > 1
  ) sub
  join [MyTable] dest 
    on dest.requirementid = sub.requirementid
    and dest.dtmexecuted = sub.dtmexecuted
order by requirementid, dtmexecuted

您也可以使用CTE或表格变量来执行此操作…

这是我解决此问题的常用方法

select
  dest.*
from
  (
  select 
    requirementid,
    dtmexecuted,
    count(*) as RowCount
  from [MyTable]
  group by requirementid, dtmexecuted
  having count(*) > 1
  ) sub
  join [MyTable] dest 
    on dest.requirementid = sub.requirementid
    and dest.dtmexecuted = sub.dtmexecuted
order by requirementid, dtmexecuted

您也可以使用CTE或表变量来完成此操作…

我看不出任何查询失败的原因,您的查询测试是否正确?我看不出任何查询失败的原因,您的查询测试是否正确?但第一件事是为什么原始查询会失败???@loki:原始查询失败是因为GROUP BY,使用group by每个只返回一行(requirementid,dtmexecuted),但第一件事是为什么原始查询会失败???@loki:原始查询失败是因为group by,使用group by每个只返回一行(requirementid,dtmexecuted)