如何编写 case 条件来检查 sql 中多个值之间是否存在特定值?

How to write case condition to check particular value exist among multiple values in sql?

我在 table 中有一列具有 single/multiple 值。我必须根据条件转换它 yes/no。

示例:

rendition_type_sys
distribution
uploaded, distribution
uploaded
single

我需要根据条件更改值。如果列具有分布,则值应转换为 'Yes' 否则 'No'

最终输出:

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

注意:如果“distribution”是元素名称的一部分而您不想这样,您可以检查分隔符。在标准 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

您可以考虑为这些“标签”添加一个 table 以便它们是离散的。