将表中的多行合并为1个结果集行

Nat*_*han 1 mysql sql pivot

我有一个存储这样的记录的表:

name     | stat  | value
--------------------------
object1  | stat1 | val1
object1  | stat2 | val2
object1  | stat3 | val3
object1  | stat4 | val4
Run Code Online (Sandbox Code Playgroud)

但我想查询数据,以便返回这样的行

name    | stat1| stat2| stat3| stat4
-------------------------------------
object1 | val1 | val2 | val3 | val4
Run Code Online (Sandbox Code Playgroud)

我会使用案例陈述,或者如何实现这样的事情?我的例子只显示了4个可能的统计数据,但希望我可以创建足够动态的东西,如果我将来添加新的统计数据,则不必重写查询.如果那是不可能的,我的选择是什么?

OMG*_*ies 5

典型的透视查询:

  SELECT t.name,
         MAX(CASE WHEN t.stat = 'stat1' THEN t.value ELSE NULL END) AS stat1,
         MAX(CASE WHEN t.stat = 'stat2' THEN t.value ELSE NULL END) AS stat2,
         MAX(CASE WHEN t.stat = 'stat3' THEN t.value ELSE NULL END) AS stat3,
         MAX(CASE WHEN t.stat = 'stat4' THEN t.value ELSE NULL END) AS stat4
    FROM TABLE t
GROUP BY t.name
Run Code Online (Sandbox Code Playgroud)

由于需要静态分配值,如果您希望它处理动态情况,则需要将此查询转换为动态SQL - 使用MySQL的Prepared Statement语法进行动态SQL ...