繁体   English   中英

Oracle SQL自定义带联合排序

[英]Oracle SQL Custom Sort with Union

我有2个表要合并,并想使用ORDER BY CASE定制顺序,但我不断收到ORA-01785:ORDER BY项目必须是SELECT列表表达式错误的编号。

我的2个表都有一个名为“ VISIT”的列,其中包含(类似于)以下数据:

跟进表格:BASELINE,1_MONTH,2_MONTH

程序表:程序

我想合并这些表并按以下顺序排序:BASELINE,PROCEDURE,1_MONTH,2_MONTH

我认为这应该起作用:

SELECT VISIT
FROM FollowUp
UNION
SELECT VISIT
FROM Procedure
ORDER BY
    CASE VISIT
    WHEN 'BASELINE' THEN 1
    WHEN 'PROCEDURE' THEN 2
    WHEN '1_MONTH' THEN 3
    WHEN '2_MONTH' THEN 4
    ELSE 5 END

但是我收到01785错误。 我也尝试用CASE VISIT CASE 1替换CASE VISIT并得到相同的错误。 感谢您的帮助!

尝试使用子查询执行此操作:

select visit
from ((SELECT VISIT
       FROM FollowUp
      ) union
      (SELECT VISIT
       FROM Procedure
      )
     ) t
ORDER BY
    CASE VISIT
    WHEN 'BASELINE' THEN 1
    WHEN 'PROCEDURE' THEN 2
    WHEN '1_MONTH' THEN 3
    WHEN '2_MONTH' THEN 4
    ELSE 5 END;

如果不需要重复删除,请使用union all

尝试这个:

  SELECT x.visit,
         CASE x.VISIT
            WHEN 'BASELINE' THEN 1
            WHEN 'PROCEDURE' THEN 2
            WHEN '1_MONTH' THEN 3
            WHEN '2_MONTH' THEN 4
            ELSE 5
         END
            sort_by
    FROM (SELECT VISIT FROM FollowUp
          UNION ALL
          SELECT VISIT FROM Procedure) x
ORDER BY SORT_BY

尝试这个:

SELECT VISIT, CASE VISIT WHEN 'BASELINE' THEN 1 WHEN 'PROCEDURE' THEN 2 WHEN '1_MONTH' THEN 3 WHEN '2_MONTH' THEN 4 ELSE 5 END ORDERFIELD FROM FollowUp UNION SELECT VISIT, CASE VISIT WHEN 'BASELINE' THEN 1 WHEN 'PROCEDURE' THEN 2 WHEN '1_MONTH' THEN 3 WHEN '2_MONTH' THEN 4 ELSE 5 END ORDERFIELD FROM Procedure ORDER BY ORDERFIELD

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM