0

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

[uniqueID] [requirementId] [number] [description] [dtmexecuted] [amount]

我需要找到所有具有相同requiredid 和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]

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

4

2 回答 2

4

如果您需要返回行,那么您需要使用窗口函数:

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
于 2013-06-27T14:18:14.263 回答
0

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

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 或表变量来执行此操作...

于 2013-06-27T14:20:35.130 回答