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

发布于 2024-09-13 01:50:16 字数 463 浏览 5 评论 0原文

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

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 个可能的统计信息,但希望我可以创建足够动态的内容,如果我将来添加新的统计信息,则不必重写查询。如果不可能,我有什么选择?

I have a table that stores records like this:

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

But I would like to query the data so it returns rows like this

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

Would I use case statements, or how would accomplish something like this? My example shows only 4 possible stats, but hopefully I can create something dynamic enough where if I add new stats in the future, the query won't have to be rewritten. If that is not possible, what are my options?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

唐婉 2024-09-20 01:50:16

典型的数据透视查询:

  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 用于动态 SQL 的准备语句语法...

Typical pivot query:

  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

Being that values need to be statically assigned, this query needs to be converted to dynamic SQL if you want it to handle a dynamic situation - use MySQL's Prepared Statement syntax for dynamic SQL...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文