我有一个存储这样记录的表:
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
我会使用 case 语句吗,或者如何完成这样的事情?我的示例仅显示了 4 个可能的统计信息,但希望我可以创建足够动态的内容,如果我将来添加新的统计信息,则不必重写查询。如果那不可能,我有什么选择?
最佳答案
典型的数据透视查询:
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...
关于sql - 将表中的多行合并为 1 个结果集行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3408126/