php - MySql 将按日期分组的数据行转换为动态列

标签 php mysql rows multiple-columns

我需要知道如何在 mysql 中执行以下操作让我给你举个例子。

当前表数据

ID, Address, Price, Date
1, ABC, 25$, 2013-10-20
2, ABC1, 35$, 2013-10-20
3, ABC2, 45$, 2013-10-20
4, ABC3, 55$, 2013-10-20
5, ABC4, 65$, 2013-10-20
6, ABC, 25$, 2013-10-21
7, ABC1, 35$, 2013-10-21
8, ABC2, 25$, 2013-10-21
9, ABC3, 115$, 2013-10-21
10, ABC4, 65$, 2013-10-21
11, ABC, 25$, 2013-10-22
12, ABC1, 35$, 2013-10-22
13, ABC2, 345$, 2013-10-22
14, ABC3, 255$, 2013-10-22
15, ABC4, 65$, 2013-10-24

每天都会将按日期存储的数据存储到表中,我想生成一个查询来为我提供如下数据。

Address, 2013-10-20, 2013-10-21, 2013-10-22
ABC    , 25$       , 25$       , 25$
ABC1   , 35$       , 35$       , 35$
ABC2   , 45$       , 25$       , 345$
ABC3   , 55$       , 115$      , 225$
ABC4   , 65$       , 65$       , 25$

我希望每天在上述数据中添加一个新列,以便生成报告。如果也有 PHP 的解决方案,请引用。

最佳答案

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN Date = ''',
      Date,
      ''' then Price end) AS `', Date, '`' )
  ORDER BY Date ) INTO @sql
FROM Table;
SET @sql = CONCAT('SELECT Address, ', @sql, ' FROM Table GROUP BY Address');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

关于php - MySql 将按日期分组的数据行转换为动态列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19563816/

相关文章:

php - MYSQL表不会更新

php - If 语句检查数据库中的哪个表应该存储数据

mysql - 在 SQL 的单个更新语句中更新多列时的更新顺序

php - 插件中的 wp_schedule_event() 未安排 cron 事件

PHP mySQL 更新 SET LIKE %value

dataframe - Julia 数据框 - 需要根据多列缺失来选择行

postgresql - Postgres 比较来自 3 个不同表的相同行、计数和匹配

mysql - 连接不同尺寸

php - MySQL:如果表中不存在变量,如何回显文本?

php - 带有 2 个 OR 语句和 1 个 AND 语句的 SQL 查询