如何使用多个条件构造SQL CASE STATEMENT

时间:2014-07-08 05:48:58

标签: sql sql-server-2008

我想将下面的逻辑转换为SQL查询,我知道它可以使用CASE WHEN THEN THSE语句来实现,但我不知道如何将它放在查询中。请帮忙。

  1. AG_AGENTS.SALES_AREA_DESC = Dom。 - NAT
  2. 如果PX_PAXWEB.COUNTRY = AUT则PX_PAXWEB.POSTCODE
  3. 如果PX_PAXWEB.COUNTRY<> AUT然后vwPxPaxweb.SALES_AREA
  4. 如果第2点和/或第3点为空,则只需使用AG_AGENTS.SALES_AREA_DESC
  5. AG_AGENTS.SALES_AREA_DESC = Int。 - 入站,然后是vwPxPaxweb.SALES_AREA
  6. 如果第5点为null,则使用AG_AGENTS.SALES_AREA_DESC

      The new field can be called as SALES_AREA_DESC_2
    

1 个答案:

答案 0 :(得分:1)

一般逻辑是:

select 
    CASE WHEN test1 = 'a' THEN 1
        WHEN test1 = 'b' THEN 2
        WHEN (test1 = 'c') AND (test2 is null) THEN 3
        ELSE 0 END as myfield
from mytable

在您的情况下,如果我正确理解您的查询,则为:

CASE WHEN (AG_AGENTS.SALES_AREA_DESC = Dom. - NAT) 
        AND (ISNULL(PX_PAXWEB.COUNTRY,'') = AUT) THEN PX_PAXWEB.POSTCODE
     WHEN (AG_AGENTS.SALES_AREA_DESC = Dom. - NAT) 
        AND (ISNULL(PX_PAXWEB.COUNTRY,'') <> AUT) THEN vwPxPaxweb.SALES_AREA
     WHEN (AG_AGENTS.SALES_AREA_DESC = Dom. - NAT) 
             AND (PX_PAXWEB.COUNTRY is null) THEN AG_AGENTS.SALES_AREA_DESC
     WHEN (AG_AGENTS.SALES_AREA_DESC = Int. – Inbound) 
        THEN vwPxPaxweb.SALES_AREA
     WHEN (AG_AGENTS.SALES_AREA_DESC = Int. – Inbound) 
        THEN AG_AGENTS.SALES_AREA_DESC
     WHEN (AG_AGENTS.SALES_AREA_DESC is null)
            OR (Int. is null) OR (Inbound is null) 
        THEN AG_AGENTS.SALES_AREA_DESC
     ELSE AG_AGENTS.SALES_AREA_DESC -- or some other exit value

结束为SALES_AREA_DESC_2

注意:你的问题中有一些不清楚,所以我不得不做出假设: - 假设“Dom。”,“NAT”等是字段(点奇怪的是点......) - 我不确定哪些字段可以为NULL(重新:“如果第2点和/或第3点为空”等),所以我选择了全部用于案例的最后一个分支。所以你可以弄清楚其余部分。