我有一个存储这样的记录的表:
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个可能的统计数据,但希望我可以创建足够动态的东西,如果我将来添加新的统计数据,则不必重写查询。如果那是不可能的,我有什么选择?
答案 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 ...