如何将此表转换为一个行表?

时间:2017-06-19 21:25:20

标签: mysql

我有一个非常简单的静态表:

type     qty
A         10
B         20
C         30

我想将此表转换为一行结果。我使用这个查询:

SELECT type, 
   CASE WHEN type = 'A' THEN qty END AS 'A',
   CASE WHEN type = 'B' THEN qty END AS 'B',
   CASE WHEN type = 'C' THEN qty END AS 'C'
FROM mytable
GROUP BY type

结果是:

 type     A      B        C
   A     10     NULL      NULL
   B    NULL    20        NULL    
   C    NULL    NULL      30

我想要的输出:

 A    B    C
10   20   30

1 个答案:

答案 0 :(得分:0)

您需要再使用一列来使用max()或sum()和group by转置它。如果按类型分组,我们会为“A”,“B”和“C”分别设置单独的集合,因此我们会看到单独的行。

示例:

id Type Quantity
1  A    10
1  B    20
1  C    30

下面的查询也适用于MySQL 5.7(ONLY_FULL_GROUP_BY模式)和5.6。 (使用v5.7.18默认设置进行测试。)

SELECT 
    MAX(CASE
        WHEN Type = 'A' THEN qty
        ELSE NULL
    END) AS A,
    MAX(CASE
        WHEN Type = 'B' THEN qty
        ELSE NULL
    END) AS B,
    MAX(CASE
        WHEN Type = 'C' THEN qty
        ELSE NULL
    END) AS C
FROM
    myTable
GROUP BY id;

这个版本因MySQL 5.7(ONLY_FULL_GROUP_BY模式)而失败

Select id, Type from MyTable group by id;