2013-06-27 51 views
0

我使用SQL Server 2005和我有存在以下表...SQL服务器查找具有相同ID重复日期

[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。

+0

我不认为有任何理由为您查询失败,是你的,你是正确的测试? – Lokesh

回答

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 
+0

但首先是为什么原始查询会失败? – Lokesh

+1

@loki:原始查询失败是因为GROUP BY,使用组通过每个返回只有1行(requirementid,dtmexecuted) –

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或表变量做得一样好......

相关问题