所以我一直在尝试将我的数据库迁移到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附近的错误语法”。我可能会遗失任何东西?提前致谢!
答案 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,