2017-01-03 4 views
1

Ich habe eine Anforderung, bei der einige Spalten aus einer Tabelle zusammen gruppiert werden müssen, um das Ergebnis der Abfrage zu generieren. Beispielabfrage ist wie unten gezeigt:Verwendung der Reihenfolge bei einer verketteten Spalte

SELECT COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4) 
FROM MY_TABLE 
GROUP BY COLUMN1, COLUMN2, DECODE(COLUMN3, 'Y', 'YES', 'NO'); 

Ich habe einen Fall, in dem die Reihenfolge von Positionen, die durch den Benutzer spezifiziert ist, in einem Komma getrennt Sequenz von der vorderen Ende Anwendung. Zum Beispiel: 1,2 und verschiedene Kombinationen der Spaltenindizes in Abhängigkeit von der Benutzereingabe.

Ich benutze Oracle 11g als Datenbank.

Ich benötige die Reihenfolge von für die Spalten Nummern, die vom Benutzer übergeben werden. ZB:

SELECT COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4) 
FROM MY_TABLE 
GROUP BY COLUMN1, COLUMN2, DECODE(COLUMN3, 'Y', 'YES', 'NO') 
ORDER BY 1, 2; -----------<<< How should I be able to add the order by clause here dynamically 

bekomme ich folgende Fehler bei der Ausführung der obigen Abfrage:

Error starting at line 1 in command: 
SELECT COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4) 
FROM MY_TABLE 
GROUP BY COLUMN1, COLUMN2, DECODE(COLUMN3, 'Y', 'YES', 'NO') 
ORDER BY 1, 2 
Error at Command Line:4 Column:16 
Error report: 
SQL Error: ORA-01785: ORDER BY item must be the number of a SELECT-list expression 
01785. 00000 - "ORDER BY item must be the number of a SELECT-list expression" 

Bitte jemand führen könnte mir, wie ich die Reihenfolge durch die Teilnahme an dieser Abfrage hinzufügen kann !!!!! !

Vielen Dank im voraus !!!

Antwort

0

Sie können dies auf zwei Arten erreichen.

  1. Verwenden Sie den gleichen Ausdruck der Gruppe von/wählen Sie in Ihrer Bestellung von.

    SELECT COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4) 
    FROM MY_TABLE 
    GROUP BY COLUMN1, COLUMN2, DECODE(COLUMN3, 'Y', 'YES', 'NO') 
    ORDER BY COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4) 
    ; 
    
  2. Verwenden innere Auswahl und Bestellung berechnet Namen oder numerischen Index

    SELECT * FROM ( 
    SELECT COLUMN1 || '^' || COLUMN2 || '^' || DECODE(COLUMN3,'Y', 'YES', 'NO') || '^' || SUM(COLUMN4) 
    FROM MY_TABLE 
    GROUP BY COLUMN1, COLUMN2, DECODE(COLUMN3, 'Y', 'YES', 'NO')) 
    ORDER BY 1 
    
Verwandte Themen