2016-07-20 9 views
0

Ich mache eine Pivot-Tabelle mit Daten über die Oberseite, Kunden auf der Seite und Verkaufsdaten in der Mitte. Als Teil davon bekomme ich meine IN-Klausel von einer temporären Tabelle #FileDates. Hier ist der Code, der funktioniert, um die Daten in der ältesten Reihenfolge zu erhalten. Ich möchte es in der neuesten bis ältesten Reihenfolge bekommen.SQL Query Datum Sortierreihenfolge funktioniert nicht

SELECT * INTO #FileDates 
FROM 
    (SELECT distinct DLDate [DATE] from Daily where DLDate between @begin31 and @end ) TAB; 

Dies wird durch gefolgt:

DECLARE @cols NVARCHAR (MAX) 

SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATE], 106) + ']', 
      '[' + CONVERT(NVARCHAR, [DATE], 106) + ']') 
      FROM (SELECT DISTINCT [DATE] FROM #FileDates) PV 

Ich habe versucht, einen Auftrag durch Klausel in meiner Unterabfrage gestellt, aber es hat nicht funktioniert, weil Sie nicht, um durch in Inline-SQL haben. Ich habe versucht, es in:

SELECT distinct DLDate [DATE] into #FileDates 
from Daily where DLDate between @begin31 and @end order by Date desc 

Und der Befehl ausgeführt, aber die Daten waren nicht in der richtigen Reihenfolge. Bitte helfen Sie.

Antwort

0

Ich nahm Vorschlag des Geistes und ordnete sie auf dem Weg nach draußen, so mein Auswahlcode für meine Spalten ist jetzt:

SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [DATE], 106) + ']', 
     '[' + CONVERT(NVARCHAR, [DATE], 106) + ']') 
     FROM (SELECT DISTINCT [DATE] FROM #FileDates) PV order by [DATE] desc 
+1

'@ cols' ist eine skalare Variable. Es ist nicht bekannt, welcher Wert aus mehreren Zeilen ihm zugewiesen wird. Verwenden Sie "top 1" mit "order by", um sicher zu sein. –

0

Sie können eine Bestellung verwenden, wenn Sie ein TOP haben. Ich würde nicht denken, dass du 10 Millionen Zeilen haben wirst.

SELECT * INTO #FileDates 
FROM (
    SELECT distinct TOP 999999999 DLDate [DATE] 
    from Daily 
    where DLDate between @begin31 and @end 
    ORDER BY DLDate DESC 
) TAB; 

Aber hier ist, wie ich es schreiben würde, wenn die temporäre Tabelle explizit deklariert wurde.

INSERT INTO #FileDates 
    SELECT distinct DLDate [DATE] 
    from Daily 
    where DLDate between @begin31 and @end 
    ORDER BY DLDate DESC 
+0

Gute Gedanken aber weder gearbeitet. Asc und Desc gaben mir die gleichen Ergebnisse -> Älteste bis neueste. – Missy

+0

@Missy Bedenken Sie, dass Daten nur dann in einer Tabelle in einer bestimmten Reihenfolge eingefügt werden, wenn sie wieder ausgelesen werden. Wenn Sie sich für #FileDates auswählen, müssen Sie diese auch nachbestellen. – UnhandledExcepSean

+0

Okay - ich werde das überprüfen. Danke für deine Hilfe, Ghost :) Liebe den Griff. – Missy