将IIF查询转换为Transact-SQL

时间:2013-12-10 20:45:04

标签: tsql sql-server-2012 case iif

所以我一直在尝试将我的数据库迁移到SQL-2012表单Access-2010。

大多数表和查询都没问题,但我遇到了这个问题:

 IIf([mkt_Original].[IMPOEXPO]="1",IIf([prod]="0201",IIf(([USD]/[Tons])
   <[TCambio].[CortePrecio0201],1,0),IIf([prod]="0202",IIf(([USD]/[Tons])
   <[TCambio].[CortePrecio0202],1,0),1)),1) AS GPrecio,

所以我试过CASE;

 CASE WHEN [mkt_Original].[IMPOEXPO]="1", 
THEN
 CASE WHEN [rod]="0201" 
    THEN
      CASE WHEN 
      [USD]/[Tons])<[TCambio].[CortePrecio0201] 
      THEN 1 
    ELSE 0 
ELSE 
    CASE WHEN
    [prod]="0202"
    THEN
        CASE WHEN  
        [USD]/[Tons])<[TCambio].[CortePrecio0202]
        THEN 1
    ELSE 0
    ELSE 1
    END
AS GPrecio,

当我尝试运行它时,我不断收到“CASE附近的错误语法”。我可能会遗失任何东西?提前致谢!

3 个答案:

答案 0 :(得分:2)

SQL Server 2012 now supports IIF,为什么还要翻译成更冗长的CASE表达式呢?您真正需要做的就是将双引号(")更改为单引号(') - 或者删除它们,例如IMPOEXPO是数字列。

IIf([mkt_Original].[IMPOEXPO]='1',IIf([prod]='0201',IIf(([USD]/[Tons])
  <[TCambio].[CortePrecio0201],1,0),IIf([prod]='0202', 
  IIf(([USD]/[Tons])<[TCambio].[CortePrecio0202],1,0),1)),1) AS GPrecio,

答案 1 :(得分:0)

使用'(撇号)代替“(引号)并且不要忘记为每个案例陈述添加”END“:

CASE WHEN condition THEN value1 ELSE value2 END

CASE variable
    WHEN value1 THEN value2
    WHEN value3 THEN value4
    ELSE value 3
END

答案 2 :(得分:0)

CASE语句是这样的:例如,那么结束

因此,如果你嵌套它们,你必须END每个嵌套的CASE。

您也可以稍微格式化和简化代码......

CASE
   WHEN [mkt_Original].[IMPOEXPO]="1", <--Remove the comma 
      THEN CASE
           WHEN [rod]="0201" AND [USD]/[Tons])<[TCambio].[CortePrecio0201] 
              THEN 1 
           WHEN [prod]="0202" AND [USD]/[Tons])<[TCambio].[CortePrecio0202] 
              THEN 1
           ELSE 0
           END
   ELSE 1
END
AS GPrecio,