首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL中CASE语法的思考过程

SQL中CASE语法的思考过程
EN

Stack Overflow用户
提问于 2018-09-21 22:08:41
回答 1查看 25关注 0票数 1

我有下面的代码(我使用的是northwind数据库),它给出了这个图片中显示的结果

代码语言:javascript
复制
SELECT a.FirstName, a.TitleOfCourtesy, a.Notes, c.CustomerYear
FROM employees a
    INNER JOIN orders b
    ON a.EmployeeID = b.EmployeeID
    LEFT JOIN customers c
    ON b.CustomerID = c.CustomerID
WHERE a.TitleOfCourtesy = 'Ms.';

上面的代码组合了三个表,并使用a.TitleOfCourtesy = 'Ms.'选择了行。

从结果来看,我希望接受列%1992%中包含a.Notes的行,并且只显示c.CustomerYear等于1992的行。所以在前面的图片中,我应该只看到第二个顶部的行。

我想我可以使用CASE + WHEN语法来创建一种IF语句,但是在CASE行中我只得到了无效的语法使用。案件部分是在哪里之后移动,还是我使用它完全错误?

代码语言:javascript
复制
SELECT a.FirstName, a.TitleOfCourtesy, a.Notes, c.CustomerYear

CASE 
    WHEN a.Notes LIKE '%1992%' THEN c.CustomerYear LIKE '1992' 
    ELSE NULL END 

FROM employees a
    INNER JOIN orders b
    ON a.EmployeeID = b.EmployeeID
    LEFT JOIN customers c
    ON b.CustomerID = c.CustomerID
WHERE a.TitleOfCourtesy = 'Ms.';

我应该怎么想才能达到我想要的结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-21 22:19:03

你只需要扩展WHERE条款..。

代码语言:javascript
复制
SELECT a.FirstName, a.TitleOfCourtesy, a.Notes, c.CustomerYear
FROM employees a
    INNER JOIN orders b
    ON a.EmployeeID = b.EmployeeID
    LEFT JOIN customers c
    ON b.CustomerID = c.CustomerID
WHERE a.TitleOfCourtesy = 'Ms.'
  AND a.Notes LIKE '%1992%'
  AND c.CustomerYear LIKE '1992';

我也只在你的图像中看到一个匹配行,而不是两个。所以我可能误解了你想要达到的目标..。也许你想让这个排两排?

代码语言:javascript
复制
SELECT a.FirstName, a.TitleOfCourtesy, a.Notes, c.CustomerYear
FROM employees a
    INNER JOIN orders b
    ON a.EmployeeID = b.EmployeeID
    LEFT JOIN customers c
    ON b.CustomerID = c.CustomerID
WHERE a.TitleOfCourtesy = 'Ms.'
  AND a.Notes LIKE '%1992%'
  AND (c.CustomerYear LIKE '1992' OR c.CustomerYear IS NULL)

最后,您不需要LIKE '1992',您只需使用= '1992',如果值是整数,只需使用= 1992.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52451576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档