2017-01-03 25 views
1

我有一個要求,其中表中的某些列必須組合在一起以生成查詢結果。樣本查詢,如下所示:在連接列上使用Order By

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

我有其中通過在從前端應用程序以逗號分隔的序列用戶指定通過的位置的順序的情況。例如:1,2和列索引的不同組合取決於用戶輸入。

我正在使用oracle 11g作爲數據庫。

我需要對用戶傳遞的列號執行排序。例如:

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 

我得到以下錯誤上述查詢的執行:

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" 

請任何人都可以指導我如何我可以參加這個查詢添加順序!!!!! !

在此先感謝!

回答

0

您可以通過兩種方式實現此目的。

  1. 在您的順序中使用與/ select相同的表達式。

    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. 使用內選擇併爲了通過計算名稱或數字指數

    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