2013-06-27 50 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或表變量做得一樣好......

相關問題