I am using MySQL, that is why I cannot use a PIVOT statement. So I am trying to learn the old way of pivoting, using the CASE statement. But something is not working. To recreate my table:
CREATE TABLE pivot_teste (
Data DATE,
UserId TEXT,
CPF TEXT
);
INSERT INTO pivot_teste VALUES ("2021-06-02", "Joao", "297.386.970-69");
INSERT INTO pivot_teste VALUES ("2021-06-04", "Joao", "831.195.710-08");
INSERT INTO pivot_teste VALUES ("2021-06-01", "Joao", "791.843.660-10");
INSERT INTO pivot_teste VALUES ("2021-06-03", "Joao", "631.421.000-32");
INSERT INTO pivot_teste VALUES ("2021-06-01", "Maria", "297.386.970-69");
INSERT INTO pivot_teste VALUES ("2021-06-02", "Maria", "511.317.900-06");
INSERT INTO pivot_teste VALUES ("2021-06-05", "Geovanna", "096.850.790-56");
INSERT INTO pivot_teste VALUES ("2021-06-01", "Julia", "297.386.970-69");
INSERT INTO pivot_teste VALUES ("2021-06-01", "Eduardo", "297.386.970-69");
INSERT INTO pivot_teste VALUES ("2021-06-01", "Geovanna", "297.386.970-69");
The table in this example, have the following format:
Data UserId CPF
2021-06-02 Joao 297.386.970-69
2021-06-04 Joao 831.195.710-08
2021-06-01 Joao 791.843.660-10
2021-06-03 Joao 631.421.000-32
2021-06-01 Maria 297.386.970-69
2021-06-02 Maria 511.317.900-06
2021-06-05 Geovanna 096.850.790-56
2021-06-01 Julia 297.386.970-69
2021-06-01 Eduardo 297.386.970-69
2021-06-01 Geovanna 297.386.970-69
I am trying to get the following result:
Data Joao Maria Geovanna Julia Eduardo
2021-06-02 297.386.970-69 511.317.900-06 NULL NULL NULL
2021-06-04 831.195.710-08 NULL NULL NULL NULL
2021-06-01 791.843.660-10 297.386.970-69 297.386.970-69 297.386.970-69 297.386.970-69
2021-06-03 631.421.000-32 NULL NULL NULL NULL
2021-06-05 NULL NULL 096.850.790-56 NULL NULL
In this moment, I have the query below. But for some reason it produces the correct results only for UserId = "Joao"
. And only the first value for UserId = "Geovanna"
is returned. The remaining UserId
's are filled with NULL's.
SELECT Data,
CASE WHEN UserId = 'Joao' THEN CPF END AS Joao,
CASE WHEN UserId = 'Maria' THEN CPF END AS Maria,
CASE WHEN UserId = 'Geovanna' THEN CPF END AS Geovanna,
CASE WHEN UserId = 'Eduardo' THEN CPF END AS Eduardo,
CASE WHEN UserId = 'Julia' THEN CPF END AS Julia
FROM pivot_teste
GROUP BY Data;
The result of this query:
Data Joao Maria Geovanna Eduardo Julia
2021-06-02 297.386.970-69 NULL NULL NULL NULL
2021-06-04 831.195.710-08 NULL NULL NULL NULL
2021-06-01 791.843.660-10 NULL NULL NULL NULL
2021-06-03 631.421.000-32 NULL NULL NULL NULL
2021-06-05 NULL NULL 096.850.790-56 NULL NULL
Do you know what is wrong with this query? How would you pivot this pivot_teste
table?