Sqlite - group_concat 成列?
Sqlite - group_concat into columns?
是否可以做类似于 group_concat 的事情,只是不是将值组合成 1 个逗号分隔的字符串,而是将它们扩展到 table 中的多个列?最初我计划 group_concat 值,然后对字符串进行拆分以将值移动到我需要的列中,但是 SQLite 中显然没有拆分选项,我仅限于直接在 SQLite 中执行此操作(没有其他数据库或脚本选项可用)。
要生成我需要制作的报告,我有以下 table。
Item | Owner | System
----------------------
A | Bob | Sys1
B | Bob | Sys1
B | Sue | Sys1
B | Bob | Sys2
C | Bob | Sys3
C | Sue | Sys3
C | Jane | Sys3
我需要concat/pivot将其动态转换成这种格式。
Item | Owner 1 | Owner 2 | Owner 3 | Owner 4 | Owner 5 | System
----------------------------------------------------------------
A | Bob | | | | | Sys1
B | Bob | Sue | | | | Sys1
B | Bob | | | | | Sys2
C | Bob | Sue | Jane | | | Sys3
就所有者列而言,从技术上讲,每个项目的所有者最多不应超过 5 个,即使超过 5 个,我也不关心显示额外的所有者,只要因为至少有 5 个出现(在这个场景中哪个 5 个也无关紧要)。
table中可以有无限数量的"Items",大约有20个系统(尽管系统数量会改变)
仅使用 SQlite 是否可行?
您需要在 table 中设置自动递增 ID 才能实现此目的
SQLLite 没有 row_number 解析函数,它没有 pivot
关键字
在这里,我们使用相关子查询生成 row_number,并基于此选择为每个项目、系统生成 5 个所有者。
select Item,System,
max( case when rn =1 then Owner end ) as Owner1,
max( case when rn =2 then Owner end ) as Owner2,
max( case when rn =3 then Owner end ) as Owner3,
max( case when rn =4 then Owner end ) as Owner4,
max( case when rn =5 then Owner end ) as Owner5
from (
select Item, System, Owner,
(select count(*) from Table1 b where a.Item = b.Item and a.System = b.System
and a.id >= b.id) as rn
from Table1 a) T
group by Item,System
是否可以做类似于 group_concat 的事情,只是不是将值组合成 1 个逗号分隔的字符串,而是将它们扩展到 table 中的多个列?最初我计划 group_concat 值,然后对字符串进行拆分以将值移动到我需要的列中,但是 SQLite 中显然没有拆分选项,我仅限于直接在 SQLite 中执行此操作(没有其他数据库或脚本选项可用)。
要生成我需要制作的报告,我有以下 table。
Item | Owner | System
----------------------
A | Bob | Sys1
B | Bob | Sys1
B | Sue | Sys1
B | Bob | Sys2
C | Bob | Sys3
C | Sue | Sys3
C | Jane | Sys3
我需要concat/pivot将其动态转换成这种格式。
Item | Owner 1 | Owner 2 | Owner 3 | Owner 4 | Owner 5 | System
----------------------------------------------------------------
A | Bob | | | | | Sys1
B | Bob | Sue | | | | Sys1
B | Bob | | | | | Sys2
C | Bob | Sue | Jane | | | Sys3
就所有者列而言,从技术上讲,每个项目的所有者最多不应超过 5 个,即使超过 5 个,我也不关心显示额外的所有者,只要因为至少有 5 个出现(在这个场景中哪个 5 个也无关紧要)。
table中可以有无限数量的"Items",大约有20个系统(尽管系统数量会改变)
仅使用 SQlite 是否可行?
您需要在 table 中设置自动递增 ID 才能实现此目的
SQLLite 没有 row_number 解析函数,它没有 pivot
关键字
在这里,我们使用相关子查询生成 row_number,并基于此选择为每个项目、系统生成 5 个所有者。
select Item,System,
max( case when rn =1 then Owner end ) as Owner1,
max( case when rn =2 then Owner end ) as Owner2,
max( case when rn =3 then Owner end ) as Owner3,
max( case when rn =4 then Owner end ) as Owner4,
max( case when rn =5 then Owner end ) as Owner5
from (
select Item, System, Owner,
(select count(*) from Table1 b where a.Item = b.Item and a.System = b.System
and a.id >= b.id) as rn
from Table1 a) T
group by Item,System