Sql server 对SQL语法的Iff条件访问
我有一个在SQL中重新创建的access查询 访问:Sql server 对SQL语法的Iff条件访问,sql-server,ms-access,iif,Sql Server,Ms Access,Iif,我有一个在SQL中重新创建的access查询 访问: SELECT Columns , IIf([Col1]="X",IIf([COL2]<>"XXXX",1,0)) AS NEWCOL1, IIf([COL2] Not In ("HHH","GGG"),1,0) AS [NEWCOL2], IIf(([NEWCOL1]=1) Or ([NEWCOL2]=1),1,0) AS NEWCOL3 FROM [TABLE] WHERE ((([TABLE].COL2
SELECT Columns ,
IIf([Col1]="X",IIf([COL2]<>"XXXX",1,0)) AS NEWCOL1,
IIf([COL2] Not In ("HHH","GGG"),1,0) AS [NEWCOL2],
IIf(([NEWCOL1]=1) Or ([NEWCOL2]=1),1,0) AS NEWCOL3
FROM [TABLE]
WHERE ((([TABLE].COL2)<>"XXXX")) OR ((([TABLE].COL2)<>"HHH" And ([TABLE].COL2)<>"GGG"));
在SQL中:
SELECT Columns ,
"NEWCOL1" =
CASE WHEN ([COL1]='X' AND COL2<> 'XXXX') THEN 1
ELSE 0
END,
"NEWCOL2" =
CASE WHEN COL2 NOT IN ('HHH','GGG') THEN 1
ELSE 0
END ,
IIf(([NEWCOL1]=1) Or ([NEWCOL2]=1),1,0) AS NEWCOL3
FROM [TABLE]
WHERE ((([TABLE].COL2)<>'XXXX')) OR ((([TABLE].COL2)<>'HHH' And ([TABLE].COL2)<>'GGG'));
IIf[NEWCOL1]=1或[NEWCOL2]=1,1,0作为NEWCOL3
当我使用Newcol1和newcol2时,它会抛出一个错误无效列。如何在嵌套的case或iif语句中使用它们呢?如果您在SQL 2012中,其中iif是有效的,那么问题似乎是第一个外壳没有ELSE值:
IIf([Col1]='X',IIf([COL2]<>'XXXX',1,0){,NEED SOME ELSE VALUE HERE}) AS NEWCOL1,
我不知道为什么这会在Access中起作用。我想访问必须比SQL Server更能防止虚假
要用案例替换原始的第一个IIF,请执行以下操作:
CASE WHEN [Col1]='X' THEN
CASE WHEN [COL2]<>'XXXX' THEN 1 ELSE 0 END
END
通过不为第一个条件提供ELSE,如果[Col1]不等于“X”,则语句将返回NULL而不会引发错误
要使用CTE处理您最近的请求,您可以执行以下操作:
WITH cte AS (
SELECT
Columns,
CASE WHEN ([COL1]='X' AND COL2<> 'XXXX') THEN 1 ELSE 0 END AS NEWCOL1,
CASE WHEN COL2 NOT IN ('HHH','GGG') THEN 1 ELSE 0 END AS NEWCOL2
FROM [TABLE]
WHERE ((([TABLE].COL2)<>'XXXX')) OR ((([TABLE].COL2)<>'HHH' And ([TABLE].COL2)<>'GGG'))
)
SELECT *, IIf(([NEWCOL1]=1) Or ([NEWCOL2]=1),1,0) AS NEWCOL3
FROM cte;
使用case语句会容易得多。您使用的是哪个版本的SQL Server?IIFI在2012年及以后得到了支持。我知道这个案例。它的2012不完全是重复的,但您的答案是:IIf[NEWCOL1]=1或[NEWCOL2]=1,1,0作为NEWCOL3,其中NEWCOL1和NEWCOL2作为无效列抛出错误。我如何在IIf条件中使用它我创建了IIf作为Case,Case语句创建了两个列,这些列需要再次检查。Newcol1和Newcol2。既然这些列是在代码中创建的,那么在下一种情况下如何使用这些列呢?case WHEN[Col1]='X'然后case WHEN[COL2]'XXXX'然后1 ELSE 0 END END,这条语句为该特定列释放空值是的,这是我在上一段中说过的。为避免为null,请为外壳语句提供ELSE是的,我将ELSE放在外壳语句中。但我不能和条件或它可能得到相同的结果,这取决于ELSE的值。