除了1列之外,如何合并具有相同数据的3行?

问题描述 投票:0回答:2

我的输出是这样的:

急单 状态 项目 供应商 确认日期 客户 经理
555222 批准 12421 哈维 12/02/2023 0122 乔治
555222 批准 12421 哈维 12/02/2023 0122 迈克尔
555222 批准 12421 哈维 12/02/2023 0122 汤姆
543677 批准 85332 薄荷 27/01/2023 0324 约翰
200013 批准 90210 薄荷 27/01/2023 0714 布拉德
111111 批准 80765 11/01/2023 0122 乔治
111111 批准 80765 11/01/2023 0122 迈克尔
111111 批准 80765 11/01/2023 0122 汤姆

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

急单 状态 项目 供应商 确认日期 客户 经理
555222 批准 12421 哈维 12/02/2023 0122 乔治、迈克尔、汤姆
543677 批准 85332 薄荷 27/01/2023 0324 约翰
200013 批准 90210 薄荷 27/01/2023 0714 布拉德
111111 批准 80765 11/01/2023 0122 乔治、迈克尔、汤姆
mysql sql where-clause
2个回答
0
投票

通过使用组列来使用 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 ..

0
投票

大概您正在以某种方式加入客户和经理数据。因此,在将子查询加入您的订单之前,您可以在子查询中

GROUP BY
客户。

这是一个粗略的例子,假设订单、客户和客户经理来自不同的表:

SELECT *
FROM orders o
JOIN (
    SELECT c.*, GROUP_CONCAT(cm.manager SEPARATOR ', ') AS managers
    FROM customers c
    JOIN customer_managers cm
        ON c.id = cm.customer_id
    GROUP BY c.id
) cust
    ON o.customer_id = cust.id;

如果您有大量客户并且不想预先聚合所有客户的数据,您可以进行 JOIN LATERAL

SELECT *
FROM orders o
JOIN LATERAL (
    SELECT c.*, GROUP_CONCAT(cm.manager SEPARATOR ', ') AS managers
    FROM customers c
    JOIN customer_managers cm
        ON c.id = cm.customer_id
    WHERE c.id = o.customer_id
    GROUP BY c.id
) cust;

这是一个db<>fiddle

希望这可以作为如何将其应用于您的数据的示例。

© www.soinside.com 2019 - 2024. All rights reserved.