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

标签 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

我会使用 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/

相关文章:

sql - 找出哪些客户在 10 天内购买了超过 75 美元的商品

sql - 我需要在Hive中将小数点位置向左或向右移动而不四舍五入

java - JPA、MySQL、Hibernate 和 Maven 框架

linq - 使用 LINQ 的动态枢轴是否可能?

sql - 从 CTE 创建的动态表(父/子)

python - Pandas 根据列的值创建新列

sql - 重用的T-SQL游标的起始位置?

mysql - 在 PostgreSQL 中使用 SELECT 查询连接列

带有 pyodbc 的 Python 字典

mysql - MySQL 的分片和事务