如何将 3 行与 1 列以外的相同数据合并?

分享于2023年03月01日 mysql sql where-clause 问答
【问题标题】:how to merge 3 rows with the same data except 1 column?如何将 3 行与 1 列以外的相同数据合并?
【发布时间】:2023-02-21 20:21:45
【问题描述】:

我的输出是这样的:

id order status item supplier confirm date customer Manager
555222 approved 12421 Hawi 12/02/2023 0122 George
555222 approved 12421 Hawi 12/02/2023 0122 Michael
555222 approved 12421 Hawi 12/02/2023 0122 Tom
543677 approved 85332 Mint 27/01/2023 0324 John
200013 approved 90210 Mint 27/01/2023 0714 Brad
111111 approved 80765 Sweet 11/01/2023 0122 George
111111 approved 80765 Sweet 11/01/2023 0122 Michael
111111 approved 80765 Sweet 11/01/2023 0122 Tom

我试图通过使用 group_concat 和 seperate 将客户 0122 的所有经理合并为一行,但我在“分组依据”方面遇到了困难,因为我在选择中有更多字段(如输出中的 78 列)。 我想知道我的查询是否有任何方法可以使用“where”子句来搜索我的所有客户,如果他们有超过 1 位经理,如果有,查询将做一些事情来合并他们? ***经理列和客户列来自不同的表。 例如我想得到的输出:

id order status item supplier confirm date customer Manager
555222 approved 12421 Hawi 12/02/2023 0122 George, Michael, Tom
543677 approved 85332 Mint 27/01/2023 0324 John
200013 approved 90210 Mint 27/01/2023 0714 Brad
111111 approved 80765 Sweet 11/01/2023 0122 George, Michael, Tom


【解决方案1】:

通过使用组列使用 group_concat() 并将其作为第一个 cte,然后在另一个中选择其余的 72 列并加入第一个 cte 所以 sudo 代码将如下所示

with cte as (
    select idorder,status,item,supplier,confirmdate,customer,group_concat(manager)
    from table_name
    group by idorder,status,item,supplier,confirmdate,customer
),  select yours other column from table_name a join cte b on a.col1=b.col1 ..

【讨论】: