SQL Server中基于Column1生成B.Ed、PTC列的SQL实现求助
实现需求的SQL语句及说明
嗨,你这个需求其实不用子查询就能轻松搞定,用SQL Server的CASE条件表达式就可以完美实现,这比子查询更直接高效哦!
核心思路
我们可以针对每个需要生成的新列,判断Column1的值是否匹配目标内容,匹配的话返回'1'(也可以用数字1,看你具体需求),不匹配的话可以返回'0'或者NULL,具体看你想要的结果形式。
具体SQL语句
假设你的表名为YourTableName,可以用下面的语句:
SELECT Column1, CASE WHEN Column1 = 'B.Ed' THEN '1' ELSE '0' END AS B_Ed, CASE WHEN Column1 = 'PTC' THEN '1' ELSE '0' END AS PTC FROM YourTableName;
如果希望不匹配时显示NULL而不是0,可以简化成:
SELECT Column1, CASE WHEN Column1 = 'B.Ed' THEN '1' END AS B_Ed, CASE WHEN Column1 = 'PTC' THEN '1' END AS PTC FROM YourTableName;
效果示例
假设原表数据是:
| Column1 |
|---|
| B.Ed |
| B.Ed |
| B.Ed |
| PTC |
| PTC |
执行第一条SQL后会得到:
| Column1 | B_Ed | PTC |
|---|---|---|
| B.Ed | 1 | 0 |
| B.Ed | 1 | 0 |
| B.Ed | 1 | 0 |
| PTC | 0 | 1 |
| PTC | 0 | 1 |
为什么不用子查询?
子查询一般用于需要从其他数据集获取数据或者进行嵌套查询的场景,而你这个需求是对当前行的Column1做条件判断,属于行级的逻辑处理,CASE表达式刚好能胜任,代码更简洁,执行效率也更高。
内容的提问来源于stack exchange,提问作者Zain Ul Abidin
相关产品推荐
相关产品推荐

