MariaDB SQL:针对单个源的多个结果的动态列而不是行

MariaDB SQL: Dynamic Columns rather than Rows For Multiple Results Against a Single source

我有一个联系人列表,其中包含他们工作的多个部门,联系人有多少个部门各不相同,他们可能有 0 个。 当我 运行 查询而不是创建联系人副本以容纳这些多个部门时,如果找到多个结果,是否可以添加额外的列?

我现在的结果:

  email            sector
1 bob@work.com     builder
2 bob@work.com     construction
3 sally@work.com   NULL
4 greg@email.com   builder
5 jane@hello.com   baker
6 peter@hi.com     painter
7 peter@hi.com     finance
8 peter@hi.com     money-management

期望的结果:

  email            sector       sector2        sector3
1 bob@work.com     builder      construction   NULL
3 sally@work.com   NULL         NULL           NULL
4 greg@email.com   builder      NULL           NULL
5 jane@hello.com   baker        NULL           NULL
6 peter@hi.com     painter      finance        money-management

假设您只想报告 3 个扇区,我们可以尝试在 ROW_NUMBER() 的帮助下进行数据透视查询:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY email ORDER BY sector) rn
    FROM yourTable
)

SELECT
    email,
    MAX(CASE WHEN rn = 1 THEN sector END) AS sector,
    MAX(CASE WHEN rn = 2 THEN sector END) AS sector2,
    MAX(CASE WHEN rn = 3 THEN sector END) AS sector3
FROM cte
GROUP BY email;