Excel中含UNION的SQL查询按日期排序问题求助
嘿,我来帮你搞定Excel里用SQL写带UNION和日期排序的查询问题~
解决Excel中SQL带UNION的日期排序需求
首先,因为Work_order_0和Work_history_0字段完全一致,我们可以先用UNION(或UNION ALL,按需选择)把这两个表的数据合并,再和Note_0做关联,最后统一按日期排序。这里要注意:ORDER BY必须放在整个查询的末尾,作用于合并后的全部数据,单独给子查询加排序是无效的。
下面是补全并优化后的完整SQL代码:
SELECT combined.WO_Key AS 'WO key', combined.Pos_key AS 'POS key', combined.Order_date AS 'Order date', combined.Order_time/86400 AS 'Order time', Note_0.Note AS 'Note' FROM ( -- 合并Work_order和Work_history的核心数据 SELECT WO_Key, Pos_key, Order_date, Order_time FROM API3.PUB.Work_order Work_order_0 UNION ALL -- 不需要去重就用这个,比UNION快;要去重就换成UNION SELECT WO_Key, Pos_key, Order_date, Order_time FROM API3.PUB.Work_history Work_history_0 ) AS combined LEFT JOIN API3.PUB.Note Note_0 ON combined.WO_Key = Note_0.WO_Key -- 补全关联条件,假设Note表用WO_Key关联 ORDER BY combined.Order_date DESC, combined.Order_time/86400 DESC; -- 按日期+时间排序,DESC是降序,升序可去掉
关键细节说明:
- UNION vs UNION ALL:如果两张表没有重复记录,优先用
UNION ALL,它不会做去重检查,执行效率更高;如果需要剔除重复数据,就用UNION。 - 排序逻辑:把
ORDER BY放在最后,才能对合并后的所有数据生效,子查询里的排序不会影响最终结果。 - 关联适配:我默认
Note_0表也用WO_Key作为关联字段,如果实际字段名不同,你替换成对应字段即可。 - 时间转换:你原来的
Order_time/86400是把Excel时间序列号转成可读格式的逻辑,我保留了,排序时用转换后的值或者原始Order_time结果一致。
如果你的Note表和合并表还有其他关联条件,直接在ON后面补充就行~
内容的提问来源于stack exchange,提问作者Cristina K
相关产品推荐
相关产品推荐

