如何解决如何编写case条件来检查sql中多个值中是否存在特定值?
我在表中有一个具有单个/多个值的列。我必须根据条件将其转换为是/否。
示例:
rendition_type_sys
distribution
uploaded,distribution
uploaded
single
我需要根据条件更改值。如果列具有分布,则值应转换为“是”,否则为“否”
最终输出:
rendition_type_sys
Yes
Yes
No
No
我尝试了一个 case 语句,但它适用于单值而不是多值-
case when ren.rendition_type__sys='distribution' then 'Yes' else 'No' end as rendition_type__sys
解决方法
首先,您应该修复您的数据模型,这样您就不会在一个字符串中存储多个值。
与此同时,like
应该做你想做的事。例如:
(case when ren.rendition_type__sys like '%distribution%'
then 'Yes' else 'No'
end) as rendition_type__sys
注意:如果“分布”是元素名称的一部分而您不想要它,您可以检查分隔符。在标准 SQL 中,这将是:
(case when ',' || ren.rendition_type__sys || ',' like '%,distribution,%'
then 'Yes' else 'No'
end) as rendition_type__sys
字符串连接运算符可能因您使用的数据库而异。
,假设分布不是任何其他离散值的一部分,下面的代码将起作用;这是示例表单中的代码:
WITH rt AS (
SELECT 'distribution' AS rendition_type_sys
UNION SELECT 'uploaded,distribution'
UNION SELECT 'uploaded'
UNION SELECT 'single'
)
SELECT CASE WHEN rt.rendition_type_sys LIKE 'distribution' THEN 'Yes' ELSE 'No' END AS Col
FROM rt
您可以考虑为这些“标签”添加一个表格,以便它们是离散的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。