带有 CASE 语句的 SQL 透视不起作用

时间:2021-08-01 16:53:53

标签: mysql sql case

我正在使用 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 表?

1 个答案:

答案 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;