【问题标题】:Case statement in where案例陈述在哪里
【发布时间】:2014-05-12 18:42:49
【问题描述】:

我正在编写查询以获取所有发票金额 > 100(美国)> 200(加拿大)和 > 1200(mxn(墨西哥))

Invoice_Header 表(总金额和公司 ID) 公司表(公司 id 和货币 id) 货币表(货币 ID 和货币)

  SELECT IH.Invoice_Num , IH.invoice_amount , IH.invoice_date
  FROM Invoice_Header IH ,
       company c,
       Currency cu
  WHERE  IH.Company_oid = c.Company_oid
  AND    c.currency_oid = cu.currency_oid
  AND 
     CASE IH.total = 
         WHEN cu.code = 'USA' then IH.total > 100
         WHEN cu.code = 'CAN' then IH.total > 200
         WHEN cu.code = 'MXN'  then IH.total > 1200
     END

尝试在 oracle 数据库上运行时遇到语法错误。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    我不会在这里使用CASE 声明。听起来你想要一些基本的布尔逻辑

    AND(   (cu.code = 'USA' and ih.total > 100)
        OR (cu.code = 'CAN' and ih.total > 200)
        OR (cu.code = 'MXN' and ih.total > 1200))
    

    如果你出于某种原因真的想使用CASE 语句,你可以这样做

    AND 1 = (CASE WHEN cu.code = 'USA' and ih.total > 100 
                  THEN 1
                  WHEN cu.code = 'CAN' and ih.total > 200
                  THEN 1
                  WHEN cu.code = 'MXN' and ih.total > 1200 
                  THEN 1
                  ELSE 0
               END)
    

    【讨论】:

      【解决方案2】:

      我会尝试类似的东西

        SELECT IH.Invoice_Num , IH.invoice_amount , IH.invoice_date
        FROM Invoice_Header IH ,
             company c,
             Currency cu
        WHERE  IH.Company_oid = c.Company_oid
        AND    c.currency_oid = cu.currency_oid
        AND (   (cu.code = 'USA' and IH.total > 100)
             OR (cu.code = 'CAN') and IH.total > 100)
             OR (cu.code = 'MXN') and IH.total > 1200)) 
      

      如果你真的需要在 where 子句中使用 CASE,你可以这样做

      SELECT 'WEEK-END' AS col_a
        FROM DUAL
       WHERE 1 = CASE
                   WHEN to_char(sysdate, 'Day') = 'Saturday' then 1
                   WHEN to_char(sysdate, 'Day') = 'Sunday' then 1 
                   else 0
                 END
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-10
        • 2010-10-30
        • 2016-05-13
        • 2016-02-21
        • 1970-01-01
        • 2012-09-08
        • 2013-10-14
        • 2015-05-17
        相关资源
        最近更新 更多