2017-08-30 1 views
0

RankFunctionSQL-Rank-Spalte basierend auf Bedingung

Aus den Tabellendaten sollte ich die Rang-Spalte ableiten. Ziel ist einzigartig Duns basiert auf folgenden Bedingungen zu wählen:

  1. Max (ConfidenceCode)
  2. Wenn Confindencde gleich ist, wenn DeliveryAddressSeq = 0 hat nur eine Zeile auswählen, dass
  3. Wenn Confindencde gleich ist, wenn DeliveryAddressSeq = 0 hat viele Zeilen dann min CustomerCode wählen

Also, schließlich brauche ich Rank=1 Daten wie gewünscht Ausgabe

+0

Hier erfahren Sie, wie Sie den Rang anwenden https://blog.sqlauthority.com/2011/08/12/sql-server-tips-from-the-sql-joes-2-pros-development-series-ranking-functions- rank-dose_rank-and-row_number-day-12-of-35/ – Tassadaque

+0

Was ist, wenn Confindencde gleich ist und DeliveryAddressSeq! = 0? –

+0

Ich weiß, wie man Rank anwendet, aber das ist keine Straße fwd. –

Antwort

1

Die rank Fensterfunktion sollte es tun:

SELECT Duns, ConfidenceCode, DeliveryAddressSeq, CustomerCode 
FROM (SELECT Duns, ConfidenceCode, DeliveryAddressSeq, CustomerCode, 
       RANK() OVER (PARTITION BY duns 
          ORDER BY ConfidenceCode ASC, 
            CASE DeliveryAddressSeq WHEN 0 THEN 0 
                  ELSE 1 
            END ASC, 
            CustomerCode DESC) AS rk 
     FROM mytable) 
WHERE rk = 1 
+1

Mureinik, du bist wirklich Wundermann :-) Ich habe mich gefragt, wie ich unter gleichen Bedingungen rangieren soll. Die Case-Anweisung hat den Trick gemacht, den ich gesucht habe –

1

Da Sie den Rang 1 nur haben wollte, Sie waren auf der Suche nach customercode 501, 504, 507

SELECT duns, 
     confidencecode, 
     deliveryaddressseq, 
     customercode, 
     [rank] 
    FROM (SELECT *, 
       RANK() OVER (PARTITION BY duns 
           ORDER BY confidencecode DESC, 
             deliveryaddressseq, 
             customercode) AS [rank] 
      FROM t_duns) tt 
WHERE [rank] = 1 

Ergebnis

duns confidencecode deliveryaddressseq customercode rank 
1001 10    1     501    1 
1002 10    0     504    1 
1003 10    0     507    1 
Verwandte Themen