根据集合中值的存在设置布尔列的值

时间:2019-05-06 14:54:40

标签: sql sqlite sqlite-json1

我有一个格式为(INTEGER,json_array(INTEGER))的SQL表。

我需要从具有两个布尔列的表中返回结果。如果在json_array中出现1,则将其设置为true,而在数组中出现2时,则将其设置为true。显然没有相互排斥。

例如,如果数据是这样的:

import hou

node = hou.node('obj/alembic1/alembic1')

我希望能回来:

-------------------------------
| ID       |   VALUES         |
-------------------------------
|  12      |  [1, 4, 6, 11]   |
_______________________________
|  74      |  [0, 1, 2, 5]    |
-------------------------------

我设法使用json_each从values列中提取了json数据,但是不确定如何继续。

1 个答案:

答案 0 :(得分:1)

如果我没记错的话,SQLite max聚合函数支持布尔值,因此您可以简单地按数据分组:

select
    t1.id,
    max(case json_each.value when 1 then true else false end) as has1,
    max(case json_each.value when 2 then true else false end) as has2
from
    yourtable t1,
    json_each(t1.values)
group by
    t1.id