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;
我有一个联系人列表,其中包含他们工作的多个部门,联系人有多少个部门各不相同,他们可能有 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;