【问题标题】:How to add static values to SQL QUERY Result set in ORACLE如何在 ORACLE 中向 SQL QUERY 结果集添加静态值
【发布时间】:2018-01-22 19:04:37
【问题描述】:

我有一个运行良好的 SQL 查询。我正在使用 Oracle 11g。当前的 SQL 查询列出未来 6 个月的即将到来的航班,然后列出所有过去的航班。所以我的查询首先列出了 2018 年的所有航班,然后列出了早在 1998 年之后的所有旧航班。我需要在这个查询中添加两个静态值。我要添加的两个静态值是“UPCOMING FLIGHTS”和“PAST FLIGHTS”,以区分哪些航班是新的和旧的。我怎样才能做到这一点?我需要将此添加的代码与下面的当前 SQL 查询合并。我无法做到这一点。

当前 SQL 查询:

SELECT FLIGHT_NMBR, SCHEDULED_LAUNCH_DATE
  FROM FLIGHTS
  WHERE DATA_VERSION_NAME = 'WORKING' 
  AND sequence_nmbr >= 0
   ORDER BY (CASE WHEN to_date(scheduled_launch_date, 'DD-MON-YY') 
     BETWEEN add_months(trunc(sysdate, 'MON'), 0) 
     AND add_months(trunc(sysdate, 'MON'), 6) THEN 1 ELSE 2 END),
       (CASE WHEN to_date(scheduled_launch_date, 'DD-MON-YY') 
     BETWEEN add_months(trunc(sysdate, 'MON'), 0) 
     AND add_months(trunc(sysdate, 'MON'), 6) THEN SCHEDULED_LAUNCH_DATE END),
     sequence_nmbr;

上面当前SQL查询的结果:

FLIGHT_NMBR  SCHEDULED
------------ ---------
SpX-14       26-JAN-18
69P          09-FEB-18
SpX-DM1      09-MAR-18
54S          13-MAR-18
OA-9         14-MAR-18
55S          29-APR-18
SpX-15       06-JUN-18
SpX-DM2      22-JUN-18
70P          27-JUN-18
1A/R         20-NOV-98
2A           04-DEC-98

我怎样才能达到下面的预期结果:

FLIGHT_NMBR      SCHEDULED
------------     ---------
UPCOMING FLIHGTS-------------------------------STATIC VALUE I WANT TO ADD
SpX-14           26-JAN-18
69P              09-FEB-18
SpX-DM1          09-MAR-18
54S              13-MAR-18
OA-9             14-MAR-18
55S              29-APR-18
SpX-15           06-JUN-18
SpX-DM2          22-JUN-18
70P              27-JUN-18
PAST FLIGHTS-----------------------------------STATIC VALUE I WANT TO ADD
1A/R             20-NOV-98
2A               04-DEC-98

希望我的下拉菜单如下所示:

【问题讨论】:

  • 如果scheduled_launch_dateDATE 列,那么to_date(scheduled_launch_date, 'DD-MON-YY') 的作用是什么?
  • 我已经告诉过你here,Select2 插件正是你在最后 2 或 3 个问题中提出的问题。
  • 我们在这里讨论过:stackoverflow.com/questions/48233239/…,不是吗?

标签: sql oracle plsql oracle11g


【解决方案1】:

你可以这样做,

SELECT 'UPCOMING FLIHGTS' text, NULL sched
  FROM dual
UNION ALL
<your select query for upcoming flights>
UNION ALL
SELECT 'PAST FLIGHTS' text, NULL sched
  FROM dual
UNION ALL
<your select query for past flights>

【讨论】:

    【解决方案2】:

    您想做的事情应该在应用程序级别完成。 SQL 查询返回一个结果集,它是一个表——由具有相同列的行组成。您的新行格式不同。

    您可以简化逻辑并在每一行上包含标志;

    SELECT which, FLIGHT_NMBR, SCHEDULED_LAUNCH_DATE
    FROM (SELECT F.*,
                 (CASE WHEN to_date(scheduled_launch_date, 'DD-MON-YY') BETWEEN add_months(trunc(sysdate, 'MON'), 0) AND add_months(trunc(sysdate, 'MON'), 6)
                       THEN 'UPCOMING' ELSE 'PAST'
                  END) as which
          FROM FLIGHTS F
         ) F
    WHERE DATA_VERSION_NAME = 'WORKING' AND sequence_nmbr >= 0
    ORDER BY (CASE WHEN which = 'UPCOMING' THEN 1 ELSE 2 END),
             (CASE WHEN which = 'UPCOMING' THEN SCHEDULED_LAUNCH_DATE END),
            sequence_nmbr;
    

    【讨论】:

    • 那么没有办法在结果集的顶部添加“UPCOMING FLIGHTS”并在旧的上方添加“PAST FLIGHTS”?您的答案创建了一个全新的列。这对我不起作用,因为我在选择列表中使用它。我只能显示航班号。
    • @ChrisM 。 . . SQL 结果集中没有这样的行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    相关资源
    最近更新 更多