是否可以执行类似于group_concat的操作,而不是将值组合成1个逗号分隔的字符串,将它们扩展到表中的多个列中?最初我计划对group_concat值进行分组,然后对字符串进行拆分以将值移动到我需要的列中,但是在SQLite中显然没有拆分选项,我只能在SQLite中直接执行此操作(没有其他数据库的或脚本选项可用)。
要生成我需要制作的报告,我有下表。
Item | Owner | System
----------------------
A | Bob | Sys1
B | Bob | Sys1
B | Sue | Sys1
B | Bob | Sys2
C | Bob | Sys3
C | Sue | Sys3
C | Jane | Sys3
我需要动态地将其连接/转换为这种格式。
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个。)
表格中可以有无限数量的“项目”,大约有20个系统(虽然系统数量会发生变化)
这只能使用SQlite吗?
答案 0 :(得分:0)
您需要在表格中设置自动增量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