2016-11-02 1 views
0

Unten sind die Spalten finden ich in der Tabelle mit dem Namen TEMP2 habe,Wie oben 6 Spalten aus der Tabelle

[ID],[Week1], [Week2],[Week3],[Week4],[Week5], 
[Week6],[Week7],[Week8],[Week9], [Week10], 
[Week11],[Week12],[Week13], [Week14],[Week15], 
[Week16],[Week17], [Week18],[Week19],[Week20], 
[Week21], [Week22],[Week23],[Week24],[Week25], [Week26] 

ich die Top-6 Datensätze aus jeder Zeile und Anzeige finden möge.

Unten ist die Abfrage, die ich für das selbe versuchte und das erwartete Ergebnis nicht holt. Was mache ich hier falsch?

SELECT 
    id, [1], [2], [3],[4], [5], [6] 
    FROM 
    (SELECT 
     id, Val, rn 
     FROM 
     (SELECT id, Val, Col, 
      ROW_NUMBER()OVER (PARTITION BY id ORDER BY Val) 
      AS rn 
       FROM 
       TEMP2 
    UNPIVOT 
    (Val FOR Col IN ([Week1], 
    [Week2],[Week3],[Week4],[Week5],[Week6],[Week7],[Week8],[Week9], 
    [Week10],[Week11],[Week12],[Week13],[Week14],[Week15],[Week16],[Week17], 
    [Week18],[Week19],[Week20],[Week21],[Week22],[Week23],[Week24],[Week25], 
    [Week26]))AS unpvt) AS t 
     WHERE 
     t.rn <= 6) AS src 
      PIVOT 
      (MAX(Val) FOR rn IN ([1], [2], [3],[4], [5], [6])) AS pvt 

Ich bin mit SQL Server 2008.

+0

Können Sie ein Beispiel für die Ausgabe von Ihnen erwartet addieren und das Ergebnis Sie oben mit Ihrer Anfrage bekommen? – rbr94

+1

'PARTITION DURCH ID ORDER BY Val DESC', sicherlich, wenn Sie die Zahlen 1-6 zu den * höchsten * Werten von' Val' anstatt der niedrigsten zuweisen möchten. –

+0

Die Person, die unten gewählt hat, kann mir den Grund dafür erklären? – Developer

Antwort

2

von Damien_The_Unbeliever in den Kommentaren oben vorgeschlagen Wie es scheint, Sie müssen nur ORDER BY Val DESC in Ihrer PARTITION BY Aussage zunächst die größten Werte zurückzukehren.

Dieser arbeitete für mich auf einige Testdaten I aufgestellt:

SELECT 
    id, [1], [2], [3], [4], [5], [6] 
    FROM 
    (SELECT 
     id, Val, rn 
     FROM 
     (SELECT id, Val, Col, 
      ROW_NUMBER()OVER (PARTITION BY id ORDER BY Val DESC) 
      AS rn 
       FROM 
       TEMP2 
    UNPIVOT 
    (Val FOR Col IN ([Week1], 
    [Week2],[Week3],[Week4],[Week5],[Week6],[Week7],[Week8],[Week9], 
    [Week10],[Week11],[Week12],[Week13],[Week14],[Week15],[Week16],[Week17], 
    [Week18],[Week19],[Week20],[Week21],[Week22],[Week23],[Week24],[Week25], 
    [Week26]))AS unpvt) AS t 
     WHERE 
     t.rn <= 6) AS src 
      PIVOT 
      (MAX(Val) FOR rn IN ([1], [2], [3], [4], [5], [6])) AS pvt 
+0

Ja, es hat funktioniert .. Danke! – Developer

+0

Kein Problem, Kredit sollte [Damien_The_Unbeliever] (http://Stackoverflow.com/users/15498/damien-the-unbeliever) aber wirklich gehen. – 3N1GM4

Verwandte Themen