我有一个非常简单的静态表:
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
答案 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;