sql - 如果列包含某个值,则选择一个预定义的字符串
问题描述
我有一张看起来像这样的桌子
ID Column a Column b
-- --------- --------
1 1 a
2 0 b
3 1 c
是Column a
位类型。给定一个ID,我想要实现的是这样的:
@Id = 1 -> a, 'Hello'
@Id = 2 -> b, ''
@Id = 3 -> c, 'Hello'
我试图用没有结果的 IF 和 ELSE 语句来做到这一点。我认为我不明白 IF 和 ELSE 在 SQL 中的工作原理。我试过的:
SELECT Column b
,IF(Column a = 1) SELECT 'Hello' ELSE SELECT ''
FROM Table where ID = @Id
总之,我正在寻找一种根据某个查询的值“打印”某个值的方法。
解决方案
这就是 CASE 的用途
SELECT
b,
CASE a
WHEN 1 THEN 'HELLO'
ELSE ''
END
CASE有两种形式:
CASE
WHEN boolean_test THEN result
WHEN other_boolean_test THEN other_result --optional
... --more WHENs, optional
ELSE --optional
END
和
CASE x
WHEN value_to_compare_to_x THEN result
WHEN other_value_to_compare_to_x THEN other_result --optional
... --more WHENs, optional
ELSE --optional
END
两者都可以,但是对于解码单个列,我发现CASE column WHEN value THEN result
表格更整洁。请注意,虽然您不能在这种形式中使用复杂的表达式,例如CASE x WHEN IN(1,2,3) THEN ..
是不允许的;你必须使用CASE WHEN x IN(1,2,3) THEN..
推荐阅读
- vb.net - vb.net 如何使用 movelast 或 movenext?
- javascript - Plugin/Preset 文件不允许导出对象,只有在 ReactJs 中使用 jest 时才起作用
- c# - 如何从调用C#中相同方法的列表中一起运行50个线程
- javascript - 对象数组的每 5 个值求和
- javascript - 如何在捆绑的 Electron 应用程序中调用服务器相对 URL?
- azure-devops - 在 wiki 页面中链接用户
- javascript - react-native run-android 构建成功但不工作
- elasticsearch - 获取 Elasticsearch 中索引的日期字段列表
- gitlab - Gitlab 社区版 (Gitlab CE) 有哪些限制?
- php - 插入语句不更新数据库