Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 对SQL语法的Iff条件访问_Sql Server_Ms Access_Iif - Fatal编程技术网

Sql server 对SQL语法的Iff条件访问

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

我有一个在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)<>"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的值。