Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
在where子句tsql中选择内部case语句_Sql_Sql Server_Tsql - Fatal编程技术网

在where子句tsql中选择内部case语句

在where子句tsql中选择内部case语句,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在where子句中编写了一个case条件,该条件在没有任何子查询的情况下运行良好,但不适用于子查询 比如说 declare @isadmin varchar(5) = 'M' select * from Aging_calc_all a where a.AccountNumber in (case @isadmin when 'M' then 1 else 0 end) 这很好用 然而,这似乎不起作用- select * from Aging_calc_all a where a.Acc

我在where子句中编写了一个case条件,该条件在没有任何子查询的情况下运行良好,但不适用于子查询

比如说

declare @isadmin varchar(5) = 'M'

select * from Aging_calc_all a where a.AccountNumber in 
(case @isadmin when 'M' then 1 else 0 end)
这很好用

然而,这似乎不起作用-

select * from Aging_calc_all a where a.AccountNumber in 
(case @isadmin when 'M' then (select AccountNumber from ACE_AccsLevelMaster where AssignedUser=7) else 0 end)

任何建议,或者这是2008年的t-sql错误。

这应该有效,尽管这不是问题的直接答案:

select * from Aging_calc_all a where a.AccountNumber in (
   SELECT AccountNumber 
     from ACE_AccsLevelMaster 
     where AssignedUser=7 AND @isadmin = 'M'
   UNION ALL select 0 where @isadmin <> 'M'
   )
SELECT * 
FROM   aging_calc_all a 
WHERE  ( @isadmin <> 'M' AND a.accountnumber = 0 ) 
    OR ( @isadmin =  'M' AND a.accountnumber IN (SELECT accountnumber 
                                     FROM   ace_accslevelmaster 
                                     WHERE  assigneduser = 7) ) 

我相信,您收到的错误是子查询返回的值超过1。因此,之后不能返回多个值。 您应该将查询重写为以下内容:

select 
    * 
from Aging_calc_all a 
where 
    (@isadmin='M' and a.AccountNumber in (select AccountNumber from ACE_AccsLevelMaster where AssignedUser=7))
    or 
    (@isadmin<>'M' and a.AccountNumber=0)

这可能会从ACE_AccsLevelMaster返回多个值,其中AssignedUser=7,试着从ACEYACKSLEVELMART中选择CONTACANDATION编号,AssiigNeDeUs:7这似乎是有效的,但这不是使用多个条件的case语句。@ PrADYUTBHATCHARYA可以使用尽可能多的Union所有标准作为案例,参见我的编辑详细说明一件事:考虑没有返回行。关于这一点,但我试图用CASE解决这个问题:我现在用这个,但你能告诉我为什么CASE不可能做到这一点吗?谢谢,还有一点。@QMaster,因为CASE是这样工作的:计算条件列表并返回多个可能的结果表达式之一。。它允许您对CASE使用比较运算符,但也意味着CASE不能返回多个值。@AdamŁuniewski我尝试使用一个特殊函数返回不同的列表,该函数将字符串列表拆分为块,并作为每个CASE结果的表状记录返回,但失败。我想正如你所说,凯斯不能这么做,因为这是自然现象,不是吗?
select 
    * 
from Aging_calc_all a 
where 
    (@isadmin='M' and a.AccountNumber in (select AccountNumber from ACE_AccsLevelMaster where AssignedUser=7))
    or 
    (@isadmin<>'M' and a.AccountNumber=0)