Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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
Sql 当桶不是'时,情况相当于使用桶;这不是相互排斥的吗?_Sql - Fatal编程技术网

Sql 当桶不是'时,情况相当于使用桶;这不是相互排斥的吗?

Sql 当桶不是'时,情况相当于使用桶;这不是相互排斥的吗?,sql,Sql,在SQL中,当存储桶不一定相互排斥时,将数据存储到类别中的最佳方法是什么 当使用普通case-When语句时,数据被限制在它符合条件的第一个类别中,并且在case-When语句后面的其他桶中不被考虑。我希望能够将数据分为所有可能的类别 例如,假设我们有字符串“ABC”。我想使用bucket“string contains A”、“string contains B”、“string contains D”对这个字符串进行分类。我的代码类似于以下代码: Select case when stri

在SQL中,当存储桶不一定相互排斥时,将数据存储到类别中的最佳方法是什么

当使用普通case-When语句时,数据被限制在它符合条件的第一个类别中,并且在case-When语句后面的其他桶中不被考虑。我希望能够将数据分为所有可能的类别

例如,假设我们有字符串“ABC”。我想使用bucket“string contains A”、“string contains B”、“string contains D”对这个字符串进行分类。我的代码类似于以下代码:

Select case 
when string like '%A%' then 'String_Contains_A'
when string like '%B%' then 'String_Contains_B'
when string like '%D%' then 'String_Contains_D'
else 'Other'
end as bucket,
String 
from datatable 
where string = 'ABC'

从我现在的理解来看,字符串“ABC”似乎只能用bucket“string\u Contains\u A”来分类,而不能用“string\u Contains\u B”来分类。在bucket“string_Contains_A”和“string_Contains_B”下对字符串进行分类的最有效方法是什么。谢谢大家!

联合查询可以工作

select 'bucket1' bucket, other fields
from etc
where whatever
union all
select 'bucket2' bucket, other fields
from etc
where whatever
etc

您可以使用标志而不是名称:

Select string,
       (case when string like '%A%' then 1 else 0 end) as String_Contains_A,
       (case when string like '%B%' then 1 else 0 end) as String_Contains_B,
       (case when string like '%D%' then 1 else 0 end) as String_Contains_D
from datatable 
where string = 'ABC';

编辑您的问题并提供具体数据和期望的结果。如果“橙色”的记录同时出现在“红色”和“黄色”的存储桶中,这个外观会如何?在您的输出中将它拆分为两个记录吗?两个桶是否都用逗号分隔?对于Gordon来说,一些样本数据和您对该样本数据的期望结果在这里会有很大帮助。它已经被编辑过了。很抱歉格式化了。第一个帖子,正在尝试修复。谢谢我希望OP能解释他们的产出会是什么样子,但我同意这很可能是他们想要的。