我有一个表格id
字段(不是主键)包含1
或null
。在过去的几年中,任何给定的部件都可以多次输入这些可能的选项中的一个或两个。
我正在尝试编写一个语句,如果有一个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
答案 0 :(得分:1)
您可以使用条件聚合来检查某个部件是否至少有一行,其中id = 1。
SELECT part,'True' id
from parts
group by part
having count(case when id = 1 then 1 end) >= 1
要在id为全空时使用
返回falseselect 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