我有其他人的 Access 查询,我需要将其转换为 T-SQL。 我已经完成了大部分工作。 接下来的两行是我的问题。 这是访问 SQL:
...
, [MATERIALVALUE]/1000 AS COSTOURS
...
, IIf([ALLJOBS].[SALESID]="SUI",[COSTOURS]=0,IIf([PRICE]=-1,[COSTOURS]=0,[COSTOURS])) AS COST0
...
第一线COSTOURS很简单。 它只是
...
,MATERIALVALUES/1000 COSTOURS
...
我遇到的问题是COSTOURS在后面的同一SELECT语句的CASE语句中的设置以及COST0的设置是什么?
我的 T-SQL 案例语句是这样的:
,CASE AllJobs.SALESID
WHEN 'SUI' THEN COSTOURS = 0
ELSE CASE ESSDBtRels.PRICE
WHEN -1 THEN COSTOURS = 0
ELSE ESSDBtRels.MATERIALVALUE/1000
END
END COST0
这显然不起作用。 如何根据后续 CASE 语句的真实属性使用新结果设置先前设置的列。 在 TRUE 和 FALSE 的情况下,COST0 被设置为什么? 一个假的,假的将把成本0设置为成本。
谢谢@forpas,由于材料价值没有影响,我将使用以下SQL:
CASE AllJobs.SALESID
WHEN 'SUI' THEN 0
ELSE CASE ESSDBtRels.PRICE
WHEN 1 THEN 0
ELSE ESSDBtRels.MATERIALVALUE/1000
END
END COST0
在 MS Access 中,像[COSTOURS]=0
这样的布尔表达式被评估为TRUE
的-1
或FALSE
的0
。
因此,要获得相同的结果,您应该使用 CASE 语句来代替这些表达式:
CASE AllJobs.SALESID
WHEN 'SUI' THEN CASE ESSDBtRels.[MATERIALVALUE] WHEN 0 THEN -1 ELSE 0 END
ELSE CASE ESSDBtRels.PRICE
WHEN -1 THEN CASE ESSDBtRels.[MATERIALVALUE] WHEN 0 THEN -1 ELSE 0 END
ELSE ESSDBtRels.MATERIALVALUE/1000
END
END COST0
或带IIF()
:
IIF(
[ALLJOBS].[SALESID]='SUI',
IIF(ESSDBtRels.MATERIALVALUE=0, -1, 0),
IIf(
[PRICE]=-1,
IIF(ESSDBtRels.MATERIALVALUE=0, -1, 0),
ESSDBtRels.MATERIALVALUE/1000
)
) AS COST0