Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.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/27.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 或关键字,当其本身在WHERE子句中时_Sql_Sql Server_Reporting Services_Ssrs 2012 - Fatal编程技术网

Sql 或关键字,当其本身在WHERE子句中时

Sql 或关键字,当其本身在WHERE子句中时,sql,sql-server,reporting-services,ssrs-2012,Sql,Sql Server,Reporting Services,Ssrs 2012,第一篇文章在这里,但我已经是一个潜伏多年。下面是: 我有一个查询,在WHERE中有一个CASE-WHEN子句。但是,我需要在这种情况下搜索两种可能的状态 代码如下: SELECT [...] FROM [...] WHERE (Admissions.Session = @Session) AND (Admissions.Remark IN CASE (RIGHT(@Session, 1)) WHEN 1 THEN ('H

第一篇文章在这里,但我已经是一个潜伏多年。下面是:

我有一个查询,在WHERE中有一个CASE-WHEN子句。但是,我需要在这种情况下搜索两种可能的状态

代码如下:

SELECT        
[...]

FROM            
[...]

WHERE        
(Admissions.Session = @Session) AND 

(Admissions.Remark IN 
CASE (RIGHT(@Session, 1)) 
    WHEN 1 THEN ('HY', 'HN')
    WHEN 3 THEN ('AY', 'AN')
END)
(Admissions.Remark = CASE (RIGHT(@Session, 1)) 
    WHEN 1 THEN 'HY' 
    WHEN 1 THEN 'HN' 
    WHEN 3 THEN 'AY' 
    WHEN 3 THEN 'AN' 
END)
(Admissions.Remark = CASE (RIGHT(@Session, 1)) 
    WHEN 1 THEN 'HY' OR 'HN' 
    WHEN 3 THEN 'AY' OR 'AN'
END)
基本上,我会尝试获取所有的招生行。当session参数的最后一位是“1”时,备注是“HY”或“HN”。 如果session参数以'3'结尾,那么我想获取'AY'或'an'的注释

我也尝试过这样的方法:

SELECT        
[...]

FROM            
[...]

WHERE        
(Admissions.Session = @Session) AND 

(Admissions.Remark IN 
CASE (RIGHT(@Session, 1)) 
    WHEN 1 THEN ('HY', 'HN')
    WHEN 3 THEN ('AY', 'AN')
END)
(Admissions.Remark = CASE (RIGHT(@Session, 1)) 
    WHEN 1 THEN 'HY' 
    WHEN 1 THEN 'HN' 
    WHEN 3 THEN 'AY' 
    WHEN 3 THEN 'AN' 
END)
(Admissions.Remark = CASE (RIGHT(@Session, 1)) 
    WHEN 1 THEN 'HY' OR 'HN' 
    WHEN 3 THEN 'AY' OR 'AN'
END)
……但两者都不起作用。后者只返回设置了注释“HY”的行,忽略了“HN”行

因此,我在寻找这样的东西:

SELECT        
[...]

FROM            
[...]

WHERE        
(Admissions.Session = @Session) AND 

(Admissions.Remark IN 
CASE (RIGHT(@Session, 1)) 
    WHEN 1 THEN ('HY', 'HN')
    WHEN 3 THEN ('AY', 'AN')
END)
(Admissions.Remark = CASE (RIGHT(@Session, 1)) 
    WHEN 1 THEN 'HY' 
    WHEN 1 THEN 'HN' 
    WHEN 3 THEN 'AY' 
    WHEN 3 THEN 'AN' 
END)
(Admissions.Remark = CASE (RIGHT(@Session, 1)) 
    WHEN 1 THEN 'HY' OR 'HN' 
    WHEN 3 THEN 'AY' OR 'AN'
END)
有什么建议吗?我觉得我离它很近,但缺少了一些东西。
谢谢

我想这就是你要找的

Admissions.Remark = CASE 
    WHEN RIGHT(@Session, 1) = 1 AND ('HY', 'HN')
    WHEN RIGHT(@Session, 1) = 3 AND ('AY', 'AN')
END
您可以使用:

SELECT ...
FROM ...
WHERE 
   (CASE WHEN Admissions.Remark IN ('HY', 'HN') THEN 1 
         WHEN Admissions.Remark IN ('AY', 'AN') THEN 3
   END) = RIGHT(@Session, 1) 

您也可以尝试以下语句

SELECT ...
FROM ...
WHERE 
   ((Admissions.Remark  ='HY' OR Admission.Remark = 'HN') AND  RIGHT(@Session, 1) = 1)
    OR ((Admissions.Remark ='AY'OR Admission.Remark = 'AN') AND RIGHT(@Session, 1) = 3)

工作!非常感谢,已经搜索了几个小时了!如果您避免使用case语句,您的查询将更快。您可以检查以获得您的愿望输出。我没有数据集来测试这个。我想这可以解决你的问题。谢谢