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