SQLite: 多行合并字符串、字串转多行

网络收集整理如下: 

CREATE TABLE t_email (
email_id INTEGER PRIMARY KEY AUTOINCREMENT,
schedule_id INTEGER,
line_id INTEGER,
mail_group VARCHAR (20),
mail_address VARCHAR (50)
);

insert into t_email ( schedule_id, line_id, mail_address, mail_group)
values (214,1, 'ojc@qq.com','TO');


insert into t_email ( schedule_id, line_id, mail_address, mail_group)
values (214,2, 'sam@qq.com','TO');

insert into t_email ( schedule_id, line_id, mail_address, mail_group)
values (214,3, 'lee@qq.com','TO');


insert into t_email ( schedule_id, line_id, mail_address, mail_group)
values (214,4, 'IT@qq.com','CC');


insert into t_email ( schedule_id, line_id, mail_address, mail_group)
values (214,5, 'admin@qq.com','CC');

insert into t_email ( schedule_id, line_id, mail_address, mail_group)
values (214,6, 'root@qq.com','CC');

 


-- 多行合并为字符串
SQLite 聚合函数中的 group_concat()

先上定义 group_concat(x[,y])

该函数返回一个字符串,该字符串将会连接所有非NULL的x值。该函数的y参数将作为每个x值之间的分隔符,如果在调用时忽略该参数,在连接时将使用缺省分隔符","。再有就是各个字符串之间的连接顺序是不确定的。

需求是

DepID StaffName
----------------------
101 AAAaa
101 BBBb
101 CCCccc
202 DDDddd
202 EEE
202 FFF
303 GGGGG
表说明,DepID为部门ID,StaffName为员工姓名,一个部门当然会有0..N多个员工

用SQL语句将上面的表变成下面组合起来的方式。
DepID StaffNames
-------------------
101 AAAaa;BBBb;CCCccc
202 DDDddd;EEE;FFF
303 GGGGG

大概就是上面的意思吧。


聚合,后查询sqlite聚合函数,才找到group_concat()

group_concat()函数要和group by语句同时使用才能产生效果
在sqlite中应该用 || 来拼接字符串的结果
————————————————
版权声明:本文为CSDN博主「狼_夏天」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/langzxz/article/details/16807859


-- sqlite实现字符串分割
WITH split(word, str) AS (
-- alternatively put your query here
-- SELECT '', category||',' FROM categories
SELECT '', 'Auto,A,1234444,dsfdd,sd,deal'||','
UNION ALL
SELECT
substr(str, 0, instr(str, ',')),
substr(str, instr(str, ',')+1)
FROM split WHERE str!=''
) SELECT word FROM split WHERE word!='';

/* -- 结果
word
------
Auto
A
1234444
dsfdd
sd
deal
*/

posted @ 2022-12-13 17:22  samrv  阅读(585)  评论(0编辑  收藏  举报