在计算列中发出CASE语句

时间:2016-04-21 18:23:58

标签: sql oracle

我有一个SELECT语句,直到CASE部分才能正常工作,我认为这只是一个语法错误和lead time位的情况。我正在使用Oracle APEX。

我收到了错误;

ORA-00923: FROM keyword not found where expected

select 
 supplier.companyname as "Supplier", 
 purchaseorder.orderdate as "Order Date", 
 purchaseorder.duedate as "Due Date", 
 popayment.datedelivered as "Delivered", 
 (popayment.paymentdate - popayment.datedelivered) - 31 as paidontime,

/* this is the same as the next one (this works fine) */
(popayment.datedelivered - purchaseorder.duedate) - 1 as deleiverylate,   

 /* trying to advance the previous query (this does not work) */
 popayment.datedelivered - purchaseorder.duedate -1, 
                           case when "lead time" <0 then 'early'
                                when "lead time" >0 then 'late'
                                else 'on time'
                           end as "lead time";


from supplier, purchaseorder, suppliercontact, popayment


where 
     purchaseorder.SUPPLIERCONTACTID2 = suppliercontact.suppliercontactid
and
     supplier.supplierid = suppliercontact.supplierid
and
    purchaseorder.purchaseorderid = popayment.purchaseorderid

order by COMPANYNAME

感谢您的帮助 Dangerous Brian

2 个答案:

答案 0 :(得分:1)

您应该在;

删除end as "lead time";

答案 1 :(得分:1)

这是你想要的吗?

SELECT supplier.companyname                              AS "Supplier",
  purchaseorder.orderdate                                AS "Order Date",
  purchaseorder.duedate                                  AS "Due Date",
  popayment.datedelivered                                AS "Delivered",
  (popayment.paymentdate - popayment.datedelivered) - 31 AS paidontime,
  /* this is the same as the next one (this works fine) */
  (popayment.datedelivered - purchaseorder.duedate) - 1 AS deleiverylate,
  /* trying to advance the previous query (this does not work) */
  CASE
    WHEN popayment.datedelivered - purchaseorder.duedate -1 <0
    THEN 'early'
    WHEN popayment.datedelivered - purchaseorder.duedate -1 >0
    THEN 'late'
    ELSE 'on time'
  END AS "lead time"
FROM supplier,
  purchaseorder,
  suppliercontact,
  popayment
WHERE purchaseorder.SUPPLIERCONTACTID2 = suppliercontact.suppliercontactid
AND supplier.supplierid                = suppliercontact.supplierid
AND purchaseorder.purchaseorderid      = popayment.purchaseorderid
ORDER BY COMPANYNAME
相关问题