请问如图的sql应该咋写?

img

tb_1记录收费单的表
tb_2是关联收费单和项目的,一个收费单可能对应一个或多个项目
tb_3是项目表

现在想通过sql生成结果表,每个收费单是一行,将同一个收费单下的项目编号、用户放到一个单元格中,请问有办法通过sql实现吗,和把数据再用遍历去生成哪个效率高

是什么数据库?如果是oracle18c以上的话,你直接把这三个表关联起来,然后查 charge_num, max(money),max(date),listagg(project_num,','),listagg(users,',')
最后加一个 group by charge_num,

如果是18c以下,listagg要加 within group ,
如果是11g以下,还可以用wm_concat
如果是mysql,可以用group_concat
如果是postgresql,也可以用listagg

其实你这个问题就是一个将一行数据中的多个值聚合拼接成一个字符串的问题,主流数据库一般都有函数支持,你去找你对应数据库的函数就行了