我正在使用 MySQL,这就是我不能使用 PIVOT 语句的原因。所以我正在尝试使用 CASE 语句学习旧的旋转方式。但是有些东西不起作用。重新创建我的表:
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");
本例中的表格,格式如下:
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
我正在尝试获得以下结果:
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
此刻,我有以下问题。但由于某种原因,它只对 UserId = "Joao"
产生正确的结果。并且只返回 UserId = "Geovanna"
的第一个值。剩余的 UserId
用 NULL 填充。
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;
本次查询的结果:
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
你知道这个查询有什么问题吗?您将如何旋转这个 pivot_teste
表?
答案 0 :(得分:0)
你需要一个聚合函数,比如max()
:
SELECT Data,
MAX(CASE WHEN UserId = 'Joao' THEN CPF END) AS Joao,
MAX(CASE WHEN UserId = 'Maria' THEN CPF END) AS Maria,
MAX(CASE WHEN UserId = 'Geovanna' THEN CPF END) AS Geovanna,
MAX(CASE WHEN UserId = 'Eduardo' THEN CPF END) AS Eduardo,
MAX(CASE WHEN UserId = 'Julia' THEN CPF END) AS Julia
FROM pivot_teste
GROUP BY Data;