【问题标题】:Creating calculated field with subquery in oracle在 oracle 中使用子查询创建计算字段
【发布时间】:2020-12-02 19:42:27
【问题描述】:

所以我是 Oracle SQL 的新手,正在尝试使用子查询创建计算列。看起来这个信息应该不难找到,但我一直没能找到它......我非常感谢任何指导!

SQL> CREATE VIEW booking_agent_view
  2  AS
  3  SELECT sf.flight_nbr, sf.flight_date, seats_available,
  4  FROM sched_flight sf, aircraft_type at, aircraft_data ad, (SELECT count(cust_nbr) FROM reservation r GROUP BY flight_nbr, flight_date) seats_available
  5  WHERE sf.aircraft_serial_nbr = at.aircraft_serial_nbr AND at.type=ad.type;

FROM sched_flight sf, aircraft_type at, aircraft_data ad, (SELECT count(cust_nbr) FROM reservation r GROUP BY flight_nbr, flight_date) AS seats_available
*
ERROR at line 4:
ORA-00936: missing expression

谢谢!

【问题讨论】:

    标签: oracle subquery calculated-columns


    【解决方案1】:

    应该是这样的:

    CREATE VIEW booking_agent_view
    AS
    SELECT sf.flight_nbr, 
           sf.flight_date, 
           --
          (SELECT count(cust_nbr) 
           FROM reservation r 
          ) seats_available
    FROM sched_flight sf, 
         aircraft_type at, 
         aircraft_data ad    
    WHERE sf.aircraft_serial_nbr = at.aircraft_serial_nbr 
      AND at.type = ad.type;
    

    换句话说:seats_available 应该放入select 列列表中。由于它必须只返回一个值,因此您必须删除它的 group by 子句,因为它可能会导致问题。

    如果这不是您要查找的内容,并且子查询确实应该是 FROM 子句的一部分,那么它的 count 函数应该有一个别名(例如 count(cust_nbr) as cnt_cust),您可能必须加入它对其他表的子查询 - 否则您将产生交叉连接。

    基本上,这取决于您真正拥有和需要什么。示例数据以及所需的输出可能会帮助我们为您提供帮助。

    【讨论】:

      【解决方案2】:

      我不确定逻辑,但你正面临

      ERROR at line 4:
      ORA-00936: missing expression
      

      因为选择列表最后一列的额外逗号 (,)。

      ....
      SELECT sf.flight_nbr, sf.flight_date, seats_available --, <-- last comma
       FROM ...
      .....
      

      【讨论】:

        猜你喜欢
        • 2014-11-12
        • 2019-04-21
        • 1970-01-01
        • 2021-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多