a.WOL7
a.WOL7

Reputation: 87

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

I have a list of contacts with numerous sectors they work in, how many sectors a contact has varies and it's possible they have 0. When I run the query rather than creating duplications of the contact to accommodate these multiple sectors, is it possible add additional columns should more than one result be found?

My Results now:

  email            sector
1 [email protected]     builder
2 [email protected]     construction
3 [email protected]   NULL
4 [email protected]   builder
5 [email protected]   baker
6 [email protected]     painter
7 [email protected]     finance
8 [email protected]     money-management

Desired Outcome:

  email            sector       sector2        sector3
1 [email protected]     builder      construction   NULL
3 [email protected]   NULL         NULL           NULL
4 [email protected]   builder      NULL           NULL
5 [email protected]   baker        NULL           NULL
6 [email protected]     painter      finance        money-management

Upvotes: 0

Views: 181

Answers (1)

Tim Biegeleisen
Tim Biegeleisen

Reputation: 521289

Assuming you want to report only 3 sectors, we can try a pivot query with the help of 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;

Upvotes: 1

Related Questions