2016-08-08 38 views
1

Eine regelmäßige Verwendung von "WITH TIES" & das Ergebnis der Abfrage:in alphabetischer Reihenfolge eine Liste mit einem Satz von ‚WITH TIES-Ranking - ORDER BY (mehrere Felder)

Demand: Das Beste aus 10 Filme als Oscar gewinnt

SELECT TOP 10 WITH TIES F.FilmName AS TITLE, 
         F.FilmOscarWins AS [OSCAR WINS] 
         FROM DBO.tblFilm F 
         WHERE FilmOscarWins IS NOT NULL 
         ORDER BY [OSCAR WINS] DESC; 

Resullt of the first query

Als ich „TITEL“ auf dem Gebiet der Bestellung um durch die Liste alphabetisch sortiert zu machen, aber es funktioniert nicht richtig!

  • Keine 13 Filme in der Liste

  • Keine alphabetische Reihenfolge

Demand: Das Beste aus 10 Filmen in alphabetischer Reihenfolge:

SELECT TOP 10 WITH TIES F.FilmName AS TITLE, 
         F.FilmOscarWins AS [OSCAR WINS] 
         FROM DBO.tblFilm F 
         WHERE FilmOscarWins IS NOT NULL 
         ORDER BY [OSCAR WINS] DESC, TITLE; 

Also was soll ich tun, um eine alphabetische Reihenfolge zu machen, während es mit 'WITH TIES - ORDER BY' sortiert wird?

+0

die Datenbank herunterladen: https://drive.google.com/file/d/0B3Vg90Skuv-gV0NaWXByRlRmT3c/view?usp=sharing –

+0

Bitte geben Sie das Ergebnis Abfragen als Text und zeigen auch Ihr erwartetes Ergebnis – TheGameiswar

+0

Versuchen Sie mit DENSE_RANK()/RANK() und filtert Datensätze, wo dieser Rang <= 10 –

Antwort

1

Ihre Anfrage erhält die Top 10 der Oscar-prämierten Filme. Dies ist, was TOP 10 und ORDER BY in dieser Abfrage sind.

Jetzt möchten Sie diesen Datensatz verwenden und in einer anderen Reihenfolge anzeigen. Dies bedeutet eine zusätzliche Abfrage mit einer eigenen ORDER BY Klausel:

SELECT * 
FROM 
(
    SELECT TOP 10 WITH TIES 
    F.FilmName AS TITLE, 
    F.FilmOscarWins AS [OSCAR WINS] 
    FROM DBO.tblFilm F 
    WHERE FilmOscarWins IS NOT NULL 
    ORDER BY [OSCAR WINS] DESC 
) top10 
ORDER BY TITLE; 
1

Zwei ORDER BY s das Problem lösen. Wenn Sie das Ranking aufgenommen werden sollen, verwenden Sie rank():

SELECT f.* 
FROM (SELECT F.FilmName AS TITLE,F.FilmOscarWins AS [OSCAR WINS], 
       RANK() OVER (ORDER BY [OSCAR WINS] DESC) as ranking 
     FROM DBO.tblFilm F 
     WHERE FilmOscarWins IS NOT NULL 
    ) f 
WHERE ranking <= 10 
ORDER BY [OSCAR WINS] DESC, Title;