MySQL没有提供创建透视查询的内置方法。但是,可以使用准备好的语句来创建它们。
假设表tbl_values:
ID | 名称 | 组 | 值 |
---|---|---|---|
1 | 皮特 | 一种 | 10 |
2 | 皮特 | 乙 | 20 |
3 | 约翰 | 一种 | 10 |
请求:创建一个查询,显示Value每个查询的总和Name;的Group必须是列标题,Name必须是行标题。
-- 1. Create an expression that builds the columns set @sql = ( select group_concat(distinct concat( "sum(case when `Group`='", Group, "' then `Value` end) as `", `Group`, "`" ) ) from tbl_values ); -- 2. Complete the SQL instruction set @sql = concat("select Name, ", @sql, " from tbl_values group by `Name`"); -- 3. Create a prepared statement prepare stmt from @sql; -- 4. Execute the prepared statement execute stmt;
结果:
名称 | 一种 | 乙 |
---|---|---|
约翰 | 10 | 空值 |
皮特 | 10 | 20 |
重要提示:不再需要准备好的语句时,请对其进行分配:
deallocate prepare stmt;
SQL小提琴上的示例