2017-04-13 4 views
0

Die folgende Abfrage zeigt Duplikate in einer Tabelle mit den Alias ​​Menge die Gesamtzahl zeigt, zB wenn es fünf Duplikate sind dann alle fünf die gleiche Menge haben = 5.Incremental Anzahl der Duplikate

select s.*, t.* 
from [Migrate].[dbo].[Table1] s 
join (
    select [date] as d1, [product] as h1, count(*) as qty 
    from [Migrate].[dbo].[Table1] 
    group by [date], [product] 
    having count(*) > 1 
) t on s.[date] = t.[d1] and s.[product] = t.[h1] 
ORDER BY s.[product], s.[date], s.[id] 

Ist es möglich, die count(*) as qty zu ändern, um eine inkrementelle Zählung zu zeigen, so dass fünf Duplikate 1,2,3,4,5 anzeigen würde?

+1

Bitte erläutern Sie, wie Sie ein Duplikat identifizieren. –

+0

Wenn '[date]' und '[product]' identisch sind – pathDongle

+0

Was ist Ihre gewünschte Ausgabe? – Teja

Antwort

1

Die Antwort auf Ihre Frage ist row_number(). Wie Sie es verwenden, ist eher unklar, weil Sie keine Anleitungen wie Beispieldaten oder gewünschte Ergebnisse bereitstellen. Daher ist diese Antwort ziemlich allgemein:

select s.*, t.*, 
     row_number() over (partition by s.product order by s.date) as seqnum 
from [Migrate].[dbo].[Table1] s join 
    (select [date] as d1, [product] as h1, count(*) as qty 
     from [Migrate].[dbo].[Table1] 
     group by [date], [product] 
     having count(*) > 1 
    ) t 
    on s.[date] = t.[d1] and s.[product] = t.[h1] 
order by s.[product], s.[date], s.[id]; 

Die Spekulation ist, dass die Duplikate von Produkt sind. Dies zählt sie nach Datum auf. Eine Kombination der partition by und group by ist fast sicher, was Sie brauchen.

Verwandte Themen