and配合case when使用
时间: 2023-07-08 21:42:55 浏览: 119
"and" 是逻辑运算符,用于连接两个或多个条件,只有当所有条件都为真时,整个表达式才为真。而 "case when" 是一种条件语句,用于根据不同的条件返回不同的值。在使用 "case when" 时,可以通过 "and" 连接多个条件,以满足更加复杂的要求。例如:
```
select
case
when score >= 90 and score <= 100 then '优秀'
when score >= 80 and score < 90 then '良好'
when score >= 70 and score < 80 then '中等'
when score >= 60 and score < 70 then '及格'
else '不及格'
end as grade
from student;
```
以上示例中,在使用 "case when" 语句时,使用了 "and" 连接多个条件,以满足不同分数段的要求,返回对应的成绩等级。
相关问题
使用SUBSTRING、CHARINDEX、LEN等函数,写一个sql server查询,不能使用string_split函数。在MeetItem20200119表中,JoinName列,MsterName列和MeetSummaryName列中有若干人员姓名且多个姓名之间用逗号隔开,统计这三列中每个名字的出现次数并把其在这三列的出现次数展示出来。
可以使用 SUBSTRING、CHARINDEX、LEN 等函数配合使用,编写 SQL 查询语句来实现该需求。具体实现方法如下:
```
SELECT Name, SUM(CASE WHEN JoinName LIKE '%'+Name+'%' THEN 1 ELSE 0 END) AS JoinNameCount,
SUM(CASE WHEN MsterName LIKE '%'+Name+'%' THEN 1 ELSE 0 END) AS MsterNameCount,
SUM(CASE WHEN MeetSummaryName LIKE '%'+Name+'%' THEN 1 ELSE 0 END) AS MeetSummaryNameCount
FROM (
SELECT SUBSTRING(','+JoinName+',', Number+1, CHARINDEX(',', ','+JoinName+',', Number+1)-Number-1) AS Name
FROM MeetItem20200119
CROSS JOIN master..spt_values
WHERE Type = 'P' AND Number < LEN(','+JoinName+',')-1
UNION ALL
SELECT SUBSTRING(','+MsterName+',', Number+1, CHARINDEX(',', ','+MsterName+',', Number+1)-Number-1) AS Name
FROM MeetItem20200119
CROSS JOIN master..spt_values
WHERE Type = 'P' AND Number < LEN(','+MsterName+',')-1
UNION ALL
SELECT SUBSTRING(','+MeetSummaryName+',', Number+1, CHARINDEX(',', ','+MeetSummaryName+',', Number+1)-Number-1) AS Name
FROM MeetItem20200119
CROSS JOIN master..spt_values
WHERE Type = 'P' AND Number < LEN(','+MeetSummaryName+',')-1
) AS Names
GROUP BY Name
```
上述 SQL 查询语句首先使用了三个 UNION ALL 子句,将 JoinName、MsterName 和 MeetSummaryName 中所有的姓名拆分成单个的姓名,生成一个 Name 的临时表。
然后使用了 SUM、CASE WHEN 等函数,将每个姓名在三列中出现的次数统计出来,并分别计算出在 JoinName、MsterName 和 MeetSummaryName 列中的出现次数。
最后使用 GROUP BY 子句,将姓名进行分组,将每个姓名的出现次数展示出来。
需要注意的是,由于没有使用 string_split 函数,因此需要使用 CROSS JOIN master..spt_values 生成一个数字表,用于拆分字符串。
使用SUBSTRING、CHARINDEX、LEN等函数,写一个sql server查询,不能使用string_split函数。在名为AKSW的数据库中有MeetItem20200119表,表中有JoinName列,MsterName列和MeetSummaryName列,这三列中有若干人员姓名且多个姓名之间用逗号隔开,统计这三列中每个名字的出现次数并把其在这三列的出现次数展示出来。
可以使用 SUBSTRING、CHARINDEX、LEN 等函数配合使用,编写 SQL 查询语句来实现该需求。具体实现方法如下:
```
SELECT Name, SUM(CASE WHEN JoinName LIKE '%'+Name+'%' THEN 1 ELSE 0 END) AS JoinNameCount,
SUM(CASE WHEN MsterName LIKE '%'+Name+'%' THEN 1 ELSE 0 END) AS MsterNameCount,
SUM(CASE WHEN MeetSummaryName LIKE '%'+Name+'%' THEN 1 ELSE 0 END) AS MeetSummaryNameCount
FROM (
SELECT SUBSTRING(','+JoinName+',', Number+1, CHARINDEX(',', ','+JoinName+',', Number+1)-Number-1) AS Name
FROM MeetItem20200119
CROSS JOIN master..spt_values
WHERE Type = 'P' AND Number < LEN(','+JoinName+',')-1
UNION ALL
SELECT SUBSTRING(','+MsterName+',', Number+1, CHARINDEX(',', ','+MsterName+',', Number+1)-Number-1) AS Name
FROM MeetItem20200119
CROSS JOIN master..spt_values
WHERE Type = 'P' AND Number < LEN(','+MsterName+',')-1
UNION ALL
SELECT SUBSTRING(','+MeetSummaryName+',', Number+1, CHARINDEX(',', ','+MeetSummaryName+',', Number+1)-Number-1) AS Name
FROM MeetItem20200119
CROSS JOIN master..spt_values
WHERE Type = 'P' AND Number < LEN(','+MeetSummaryName+',')-1
) AS Names
GROUP BY Name
```
上述 SQL 查询语句首先使用了三个 UNION ALL 子句,将 JoinName、MsterName 和 MeetSummaryName 中所有的姓名拆分成单个的姓名,生成一个 Name 的临时表。
然后使用了 SUM、CASE WHEN 等函数,将每个姓名在三列中出现的次数统计出来,并分别计算出在 JoinName、MsterName 和 MeetSummaryName 列中的出现次数。
最后使用 GROUP BY 子句,将姓名进行分组,将每个姓名的出现次数展示出来。
需要注意的是,由于没有使用 string_split 函数,因此需要使用 CROSS JOIN master..spt_values 生成一个数字表,用于拆分字符串。另外,需要将 AKSW 替换成实际的数据库名。
阅读全文