在where子句tsql中选择内部case语句
我在where子句中编写了一个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
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)