带UNION和and的SQL ORDER BY

带UNION和and的SQL ORDER BY,sql,sql-order-by,union,alias,Sql,Sql Order By,Union,Alias,我在Excel中使用SQL,我的查询有一个UNION语句,我需要按日期排序 我有三张表:工作顺序表、工作历史表和笔记表。工作订单和工作历史记录具有相同的字段 我的代码是: SELECT Work_order_0.WO_Key AS 'WO key', Work_order_0.Pos_key AS 'POS key', Work_order_0.Order_date AS 'Order date', Work_order_0.Order_tim

我在Excel中使用SQL,我的查询有一个UNION语句,我需要按日期排序

我有三张表:工作顺序表、工作历史表和笔记表。工作订单和工作历史记录具有相同的字段

我的代码是:

SELECT  Work_order_0.WO_Key AS 'WO key',
        Work_order_0.Pos_key AS 'POS key',
        Work_order_0.Order_date AS 'Order date', 
        Work_order_0.Order_time/86400 AS 'Order time',
        Note_0.Note AS 'Note'   
FROM API3.PUB.Work_order Work_order_0 
LEFT JOIN API3.PUB.Note Note_0 ON Work_order_0.WO_Key=Note_0.Relate_key

UNION 

SELECT  Work_history_0.WO_Key AS 'WO key',  
        Work_history_0.Pos_key AS 'POS key',
        Work_history_0.Order_date AS 'Order date', 
        Work_history_0.Order_time/86400 AS 'Order time',
        Note_0.Note AS 'Note'
FROM API3.PUB.Work_history Work_history_0
LEFT JOIN API3.PUB.Note Note_0 ON Work_history_0.WO_Key=Note_0.Relate_key
ORDER BY 'Order date' DESC;
正如您在最后一行中看到的,我尝试在ORDERBY子句中使用别名,但它给出了以下错误

根据第7645条的规定,现场规范不正确


有什么建议吗?提前感谢。

您不能在同一查询中按顺序使用别名

SELECT * FROM
(SELECT  Work_order_0.WO_Key AS 'WO key',
        Work_order_0.Pos_key AS 'POS key',
        Work_order_0.Order_date AS 'Order date', 
        Work_order_0.Order_time/86400 AS 'Order time',
        Note_0.Note AS 'Note'   
FROM API3.PUB.Work_order Work_order_0 
LEFT JOIN API3.PUB.Note Note_0 ON Work_order_0.WO_Key=Note_0.Relate_key

UNION 

SELECT  Work_history_0.WO_Key AS 'WO key',  
        Work_history_0.Pos_key AS 'POS key',
        Work_history_0.Order_date AS 'Order date', 
        Work_history_0.Order_time/86400 AS 'Order time',
        Note_0.Note AS 'Note'
FROM API3.PUB.Work_history Work_history_0
LEFT JOIN API3.PUB.Note Note_0 ON Work_history_0.WO_Key=Note_0.Relate_key) AS T
ORDER BY 'Order date' DESC;

不要对列别名使用单引号。它们只会引起问题

第二,不要使用联合,当你打算联合所有人时。表别名使查询更易于编写和读取。因此,我建议如下:

SELECT w.*
FROM (SELECT wo.WO_Key, wo.Pos_key, wo.Order_date, wo.Order_time / 86400 AS Order_time,
             n.Note   
      FROM API3.PUB.Work_order wo LEFT JOIN
           API3.PUB.Note n
           ON wo.WO_Key = n.Relate_key
      UNION ALL  -- unless you really want to incur the overhead of removing duplicates
      SELECT  wh.WO_Key, wh.Pos_key, wh.Order_date, wh.Order_time / 86400,
              n.Note AS Note
      FROM API3.PUB.Work_history wh LEFT JOIN
           API3.PUB.Note n
           ON wh.WO_Key = n.Relate_key
     ) w
ORDER BY Order_date DESC;

并非所有数据库都需要ORDER BY的子查询。但是,没有人会将分隔字符串识别为任何类型表达式中的列名或键。

对别名使用双引号,这对我很有效

Select count(*) as "Count of orders" from pub.Customer c Left Join Pub.Order o ON c."Cust-Num"=o."Cust-Num"
UNION
Select count(*) as "Count of orders" from pub.Customer c Left Join  Pub.Order o ON c."Cust-Num"<o."Cust-Num"
Order by "Count of orders";
     Count of orders
--------------------
                 220
                8160

使用序号,所以按3描述排序?按3描述排序大多数DBMS只允许设置操作的列号不知道为什么,很遗憾,它给了我一个语法错误…和哪个语法错误?SQL语句中的语法错误在或大约;10713I get a无法添加表格“SELECT”错误:/Progress OpenEdge显然允许使用单引号别名:-哦,好的,谢谢你的建议。但是,我遇到了与上述解决方案类似的错误:无法添加表“SELECT”。@CristinaK。某些数据库(如SQLite)不允许在union all中对子查询使用双括号。