【问题标题】:Dynamically Pivoting Table Data | mySQL动态透视表数据 | mysql
【发布时间】:2023-03-08 14:02:01
【问题描述】:

基本上我的数据库中有一个名为Table1 的表,其中包含以下数据:

该表有一个重复的 ProductID,因为 AssignedColourColourFindingColourPower 的值不同。

我想在一行中显示所有ProductID 数据,这意味着如果列出的AssignedColourColourFindingColourPower 不止一个,则其末尾将包含一个数字。

SELECT 查询的最终结果 I 应如下所示:

水平显示的列数基于每个 ProductID

AssignedColour 数量

这样的事情可以在 mySQL SELECT 查询中完成吗?

【问题讨论】:

  • 这就是所谓的“透视”。
  • 在 MySQL 8.x 中很容易做到。您使用的是 MySQL 5.x 还是 8.x?
  • 查询返回预定义的列。如果您在编写查询时知道最大颜色数,则可以返回尽可能多的列。如果不知道,就无法编写查询。通常,这不是您通常在 SQL 中所做的事情,而是在您的应用程序或网站中。
  • 认真考虑处理应用代码中数据显示的问题
  • 本题的解法与SQL无关。这应该在应用程序端实现。您应该删除 SQL 和 MySQL 标签,并添加您正在使用的编程语言。

标签: mysql sql pivot-table


【解决方案1】:

SQL 查询无法根据查询执行期间发现的数据值扩展结果集的列数。 SELECT 列表中的列必须在准备查询时固定,它读取任何数据之前。

在查询执行期间也不能更改列名。必须在准备查询时设置它们。

没有办法在单个 SQL 查询中完成您所描述的事情。您的选择是:

  • 执行两个查询:一个是枚举每个产品的颜色,然后使用第一个查询的结果来格式化第二个查询,其中包含您想要的列。
  • 执行一次查询以获取表中存在的行中的数据,然后在您的应用中编写代码以按您认为最好的方式将其显示在行中。

无论哪种方式,您都必须在客户端中至少编写一些代码。您不能在一个查询中执行此操作。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多