【问题标题】:order by based on string alias value根据字符串别名值排序
【发布时间】:2016-12-02 07:50:21
【问题描述】:

我在下面有一个这样的查询。我想要的是将DESCRIPTION的别名设为'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 item 必须是 SELECT-list 表达式的编号

我已经尝试过这样也行不通

order by (DESCRIPTION|| 'Qty') ASC

那么如何根据这种情况下订单呢? 我在谷歌上搜索,但我不喜欢我的情况。作为信息,我使用 Oracle 数据库。

【问题讨论】:

  • Type 在哪里定义?另外请发布一些示例数据,而不仅仅是查询。
  • 如果将整个UNION 查询包装在执行ORDER BY 的外部查询中会发生什么?
  • @Dai 这只是一个字符串。我将其命名为别名。然后我将在我的报告中调用这个别名
  • @Dai 很抱歉我之前的查询有误。它必须是DESCRIPTION而不是TYPE

标签: sql oracle


【解决方案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

【讨论】:

  • 非常感谢您的回复。这不是错误,但订单本身仍然无法正常工作
  • 我猜 aboe 查询会将您的 QTY 排在第一位。你还需要什么吗?
  • 是的,我只需要 QTY 作为第一个订单。
  • 那我的查询会先按顺序给你QTY。见演示。或者你只需​​要 QTY 行?
  • 哦,是的,你是对的。对不起。我直接更改我的包程序然后运行我的报告。它仍然不像你的演示。所以问题来自现在的报告。非常感谢。
【解决方案2】:

我认为问题在于你在 AS 之后取了两个名字,看起来第一个是名字。

试试这样的

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

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2015-08-13
    • 2013-03-11
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多