Sql 或关键字,当其本身在WHERE子句中时
第一篇文章在这里,但我已经是一个潜伏多年。下面是: 我有一个查询,在WHERE中有一个CASE-WHEN子句。但是,我需要在这种情况下搜索两种可能的状态 代码如下: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
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语句,您的查询将更快。您可以检查以获得您的愿望输出。我没有数据集来测试这个。我想这可以解决你的问题。谢谢