创建透视查询

MySQL 没有提供创建数据透视查询的内置方法。但是,可以使用预准备语句创建这些。

假设表 tbl_values

ID 名称
1 皮特 一个 10
2 皮特 B 20
3 约翰 一个 10

请求:创建一个查询,显示每个 NameValue 总和; 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;

结果:

名称 一个 B
约翰 10 空值
皮特 10 20

重要说明: 一旦不再需要准备好的声明,请取消分配:

deallocate prepare stmt;

关于 SQL 小提琴的例子