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

时间:2010-08-04 17:33:29

标签: sql mysql pivot

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

name     | stat  | value
--------------------------
object1  | stat1 | val1
object1  | stat2 | val2
object1  | stat3 | val3
object1  | stat4 | val4

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

name    | stat1| stat2| stat3| stat4
-------------------------------------
object1 | val1 | val2 | val3 | val4

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

1 个答案:

答案 0 :(得分: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

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

相关问题