2016-12-02 88 views
0

我有一個類似下面的查詢。我想要的是使第一個描述的值爲'Qty'的別名。基於字符串別名的排序

SELECT 'Net Others' AS DESCRIPTION, 
      AREA_ID FROM SALES 
UNION ALL 
SELECT 'Qty' AS DESCRIPTION, 
      AREA_ID FROM SALES 
UNION ALL 
SELECT 'Sales Others' AS DESCRIPTION, 
      AREA_ID FROM SALES 
UNION ALL 
SELECT 'Discount Others' AS DESCRIPTION, 
      AREA_ID FROM SALES 

我嘗試已經加入

order by case when DESCRIPTION= 'QTY' then 1 end 

談到錯誤

ORDER BY項目必須是一個SELECT列表中表達式的數量

我嘗試已經讓像這樣也行不通

order by (DESCRIPTION|| 'Qty') ASC 

那麼如何在這種情況下進行排序呢? 我在谷歌搜索,但我沒有像我的情況。因爲我使用Oracle數據庫。

+0

'Type'定義在哪裏?也請張貼一些示例數據,而不僅僅是查詢。 – Dai

+0

如果將整個'UNION'查詢包裹在執行'ORDER BY'的外部查詢中,會發生什麼? – Dai

+0

@Dai它只是一個字符串。我將它命名爲別名。那麼這個別名,我會打電話給我的報告 –

回答

1

請試試這個:

select DESCRIPTION ,AREA_ID 
from 
    (
    SELECT 'Net Others' AS DESCRIPTION, 
       AREA_ID FROM SALES 
    UNION ALL 
    SELECT 'Qty' AS DESCRIPTION, 
       AREA_ID FROM SALES 
    UNION ALL 
    SELECT 'Sales Others' AS DESCRIPTION, 
       AREA_ID FROM SALES 
    UNION ALL 
    SELECT 'Discount Others' AS DESCRIPTION, 
       AREA_ID FROM SALES 
    )   
ORDER BY DECODE(DESCRIPTION,'Qty',1); 

演示:

select DESCRIPTION ,AREA_ID 
from 
    (
    SELECT 'Net Others' AS DESCRIPTION, 'AREA_ID' AREA_ID 
    FROM DUAL 
    UNION ALL 
    SELECT 'Qty' AS DESCRIPTION, 'AREA_ID' AREA_ID 
    FROM DUAL 
    UNION ALL 
    SELECT 'Sales Others' AS DESCRIPTION, 'AREA_ID' AREA_ID 
    FROM DUAL 
    UNION ALL 
    SELECT 'Discount Others' AS DESCRIPTION, 'AREA_ID' AREA_ID 
    FROM DUAL 
    )   
ORDER BY DECODE(DESCRIPTION,'Qty',1) 

輸出:

DESCRIPTION  AREA_ID 
--------------- ------- 
Qty    AREA_ID 
Discount Others AREA_ID 
Sales Others AREA_ID 
Net Others  AREA_ID 
+0

非常感謝您的答覆。這不是錯誤,但仍然沒有工作本身 –

+0

我猜aboe查詢會給你的QTY作爲第一個順序。你還需要什麼別的嗎。 – XING

+0

是的,我只需要數量作爲第一順序。 –

0

我認爲問題在於你拿了兩個名字後,看起來像是第一個名字。

嘗試這樣的事情

SELECT 'Net Others' AS AREA_ID FROM SALES 
etc... 

希望它有助於