sql - SQL 中使用类似通配符的通配符
问题描述
我有 3 个类别:
- 快乐的
- 伤心
- 快乐+悲伤
Id Code
1 03FJ
1 03JO
3 03PR
4 03OY
4 036X
4. 03JX
当代码类似于 '%03J' 但没有任何其他 '%03' 值时,它很高兴。
当代码类似于 '%03' 但没有任何 '%03J' 值时,这很可悲。
当代码像 '%03' 并且有其他 '%03J' 值时,它是快乐 + 悲伤
上面的预期输出将是
Id Emotion
1 Happy
3 Sad
4. Happy + Sad
我怎样才能做到这一点?当通配符基本相同时,我不确定如何捕获它。
解决方案
您可以使用聚合。最新版本的 SQL Server 支持concat_ws()
:
select id,
concat_ws(' + ',
(case when sum(case when code like '%03%J%' then 1 else 0 end) > 0
then 'Happy'
end),
(case when sum(case when code not like '%03%J%' then 1 else 0 end) > 0
then 'Sad'
end)
) as emotion
from t
group by id;
您可以使用case
表达式或其他方法在旧版本的 SQL Server 中执行类似的操作。
推荐阅读
- javascript - 我应该用什么来在 React 或 Javascript 中显示实时图标?比如一个杯子里装了多少咖啡?
- google-cloud-platform - 如何在 Bigtable 中列出表的列?
- javascript - 如果数据中有一个对象,Flatlist 不会呈现?
- postgis - 如何将我在 Postgres 中创建的数据库发送给某人?
- visual-studio-code - 有没有办法从 Visual Studio 代码扩展的 webview 导航到外部 Windows 应用程序?
- ruby-on-rails - 时不时冻结一页
- javascript - 我在将 javascript 对象传输到 php 文件并在 MySQL 数据库中获取该对象时遇到了一些问题
- angular - SVG & Angular2+ 根据背景改变元素的颜色
- windows - 在 Windows 中临时删除环境 PATH 的一个变量
- geolocation - BackgroundGeolocation 不在后台工作,但在前台火灾中为什么?