sunnybo333 2021-12-09 22:06 采纳率: 33.3%
浏览 16
已结题

请问如图的sql应该咋写?

img

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

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

  • 写回答

1条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2021-12-09 22:52
    关注

    是什么数据库?如果是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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月18日
  • 已采纳回答 12月10日
  • 创建了问题 12月9日