Impala SQL,如果字符串存在于值的子集中,则返回值

时间:2016-10-17 15:12:06

标签: sql impala

我有一个表格id字段(不是主键)包含1null。在过去的几年中,任何给定的部件都可以多次输入这些可能的选项中的一个或两个。

我正在尝试编写一个语句,如果有一个1与select语句关联,它将返回一些值。有很多半重复的行,其中一些有1,有些有null,但如果有1,我想返回true,如果有的话只有null个值,我想返回false。我不知道如何编码。

如果这是我的SELECT part,id from table where part = "ABC1234"声明

part      id
ABC1234   1
ABC1234   null
ABC1234   null
ABC1234   null
ABC1234   1

我想写一个返回true的语句,因为1存在于至少其中一行中。

我最接近的是使用CASE语句,但我还没到那里:

SELECT
a1.part part,  
CASE WHEN a2.id is not null             
  THEN
        'true'
  ELSE
        'false'
  END AS            id
from table.parts a1, table.ids a2 where a1.part = "ABC1234" and a1.key = a2.key;

我也尝试过以下案例:

CASE WHEN exists
       (SELECT id from table.ids where id = 1)               
  THEN

但我收到错误subqueries are not supported in the select list

对于上述SELECT语句,如何返回1行:

part      id
ABC1234   true

1 个答案:

答案 0 :(得分:1)

您可以使用条件聚合来检查某个部件是否至少有一行,其中id = 1。

SELECT part,'True' id
from parts
group by part
having count(case when id = 1 then 1 end) >= 1

要在id为全空时使用

返回false
select part, case when id_true>=1 then 'True'
                  when id_false>=1 and id_true=0 then 'False' end id
from (
SELECT part,
count(case when id = 1 then 1 end) id_true,
count(case when id is null then 1 end) id_false,
from parts
group by part) t