我不确定如何在 sql 中编写查询。
到目前为止,这是我尝试过的。
where
case
when a.book_id like 'AB%' then a.book_id = b.school_id, --1
when a.book_id like 'CB%' then a.book_id = b.college_id. --2
end
案例1和2的解释。
1- 我相信是好的。
2- 当 a.book
以字母 CB 开头时,例如 CBQ123
然后只取 Q123
= b.college_id
。< br/>
b.college_id 前面没有CB。
编辑以添加示例
select
a.Name,
a.ID,
a.Due,
b.school_id,
b.college_id
from Student a and FinishedStudent b
where
case
when a.book_id like 'AB%' then a.book_id = b.school_id, --1
when a.book_id like 'CB%' then a.book_id = b.college_id. --2
end
如果 a.book = CBQ111 那么 Q111 在 FinishedStudent 表中而不是 CBQ11,所以我只需要比较最后 3 个字符。
使用案例 2 示例进行编辑
when a.book_id ='CBQ111' then a.book_id(Q111) = b.college_id. --2
最佳答案
只是一个小的语法问题。在 T-SQL 中,CASE
是一个返回值的表达式,因此您需要将输出与某些内容进行比较 - 它不像在 VB 等其他语言中那样是控制流语句。
where a.book_id = case
when a.book_id like 'AB%' then b.school_id --1
when a.book_id like 'CB%' then b.college_id --2
end
根据评论中乱七八糟的单词问题,也许你真正想要的是:
WHERE (a.book_id LIKE 'AB%' AND a.book_id = b.school_id)
OR (a.book_id LIKE 'CB%' AND SUBSTRING(a.book_id, 3, 255) = b.college_id)
还有其他方法可以写最后一行,但如果 book_id 有索引,LIKE 过滤器可能仍然有用。
关于sql - 我可以在 WHERE 子句中使用 CASE 表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412738/