Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写case条件来检查sql中多个值之间是否存在特定值?_Sql_Case - Fatal编程技术网

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

如何编写case条件来检查sql中多个值之间是否存在特定值?,sql,case,Sql,Case,我在表中有一列具有单值/多值。我必须根据条件将其转换为是/否 例如: rendition_type_sys distribution uploaded, distribution uploaded single 我需要根据条件更改值。如果列具有分布,则值应转换为“是”,否则为“否” 最终输出: rendition_type_sys Yes Yes No No 我尝试了一个case语句,但它适用于单值而不是多值- case when ren.rendition_type__sys='distr

我在表中有一列具有单值/多值。我必须根据条件将其转换为是/否

例如:

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

首先,您应该修复数据模型,这样就不会在字符串中存储多个值

同时,像这样的
应该做你想做的事情。例如:

(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

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

用你正在使用的数据库标记你的问题。