Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
动态数据透视表数据| mySQL_Mysql_Sql_Pivot Table - Fatal编程技术网

动态数据透视表数据| mySQL

动态数据透视表数据| mySQL,mysql,sql,pivot-table,Mysql,Sql,Pivot Table,基本上,我的数据库中有一个名为Table1的表,其中包含以下数据: 由于assignedcolor、colorfinding和colorpower的值不同,该表的ProductID会重复 我想在一行中显示所有ProductID数据,这意味着如果有多个assignedcolor、colorfinding和colorpower列出,那么它将在末尾包含一个数字 SELECT查询的最终结果I应如下所示: 水平显示的列数基于每个产品ID的分配颜色的数量 在mySQL SELECT查询中可以实现类似的功

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

由于
assignedcolor
colorfinding
colorpower
的值不同,该表的ProductID会重复

我想在一行中显示所有
ProductID
数据,这意味着如果有多个
assignedcolor
colorfinding
colorpower
列出,那么它将在末尾包含一个数字

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

水平显示的列数基于每个产品ID的分配颜色的数量


在mySQL SELECT查询中可以实现类似的功能吗?

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

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

无法在单个SQL查询中实现所描述的内容。你的选择是:

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

无论哪种方式,您都必须在客户机中至少编写一点代码。这不能在一个查询中完成。

这就是所谓的“数据透视”。在MySQL 8.x中很容易做到。您使用的是MySQL 5.x还是8.x?查询返回预定义的列。如果在编写查询时知道最大颜色数,则可以返回尽可能多的列。如果您不知道,则无法编写查询。一般来说,这在SQL中通常是没有的,但是在你的应用程序或网站中。认真考虑应用程序代码中数据显示的问题。这个问题的解决方案不是SQL相关的。这应该在应用程序端实现。您应该删除SQL和MySQL标记,并添加您正在使用的编程语言。你介意给我举一个例子,说明如何使用2查询方法来实现这一点吗?我将不胜感激