2017-07-12 2 views
0
;with cte as select * from customer 

der Auswahl CTE um durch ParameterübergabeCTE Auswahl der Reihenfolge durch dynamischen Spaltennamen

if(@orderby=1) 
    begin 
    select * from cte order by name 
    end 
else if (@oderby=2) 
    begin 
    select * from cte order by applydate 
    end 
else 
    begin 
    select * from cte order by customeramount 
    end 

dieses folgenden Fehler ungültig Objekt CTE Wie diese SQL-Abfrage zu lösen

ich das Problem

zu lösen,

Der Code ist

SELECT * FROM cte ORDER BY CASE @OrderBy WHEN 0 THEN Name ELSE null END , CASE @OrderBy WHEN 1 THEN Code ELSE null END ,CASE @OrderBy WHEN 2 THEN ApplyAmountTotal ELSE null END ,CASE @OrderBy WHEN 3 THEN ApplyDate ELSE null END 
+0

So funktioniert die 'mit'-Klausel nicht. Sie können ein CTE nicht einfach deklarieren und dann in Ihrem TSQL-Skript verwenden, wo immer Sie möchten. Es kann nur als Teil einer anderen Abfrage (set) verwendet werden. Wenn Sie es zu einem späteren Zeitpunkt wiederverwenden müssen, erstellen Sie eine temporäre Tabelle (oder eine Tabellenvariable). –

Antwort

1

Sie können Fall verwenden, wie unten:

;With cte as 
( select * from customer ) 
Select * from cte 
    Order by (case when @orderby=1 then [name] 
        when @orderby=2 then applydate 
        else customerAmount end) 
+0

Ich habe excute, aber ich finde Fehler "Konvertierung fehlgeschlagen beim Konvertieren der Zeichenkette in smalldatetime Datentyp." –

0

name, applydate, customerAmount sind nicht die gleichen Datentyp, dann könnte man 3 CASE ...END Klauseln verwenden wie diese

SELECT * 
FROM customer 
ORDER BY   
     CASE 
      WHEN @oderby = 1 THEN name   
      ELSE '' 
     END, 
     CASE 
      WHEN @oderby = 2 THEN applydate 
      ELSE '1900-01-01' 
     END, 
     CASE 
      WHEN @oderby NOT IN (1,2) THEN customerAmount 
      ELSE 1 
     END 
0

bin ich die Antwort finden

SELECT * FROM cte ORDER BY CASE @OrderBy WHEN 0 THEN Name ELSE null END , CASE @OrderBy WHEN 1 THEN Code ELSE null END ,CASE @OrderBy WHEN 2 THEN ApplyAmountTotal ELSE null END ,CASE @OrderBy WHEN 3 THEN ApplyDate ELSE null END 
Verwandte Themen