【问题标题】:MySql convert data group by date Rows into dynamic columnsMySql将数据组按日期行转换为动态列
【发布时间】:2013-10-24 10:48:23
【问题描述】:

我需要知道如何在 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 的解决方案也请参考。

【问题讨论】:

  • MySQL dynamic-pivot 的可能重复项
  • 你看过GROUP_CONCAT..???
  • 亲爱的你能给我举个例子,因为我是新手,所以我不理解这个例子MySQL dynamic-pivot@RaphaëlAlthaus
  • 亲爱的@DipeshParmar 是的,我看了一下 GROUP_CONCAT 函数,但它在一列中连接了它。我需要多列。

标签: php mysql rows multiple-columns


【解决方案1】:
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;

【讨论】:

  • 请添加一些描述来支持这段代码
【解决方案2】:

您可以使用我创建的此代码。

SET @sql = NULL;
    select GROUP_CONCAT(DISTINCT
               CONCAT(' ROUND(SUM(CASE WHEN DATE_FORMAT(Date, ''%b %y'')=''',
                       DATE_FORMAT(Date, '%b %y'),
                       ''' THEN Price ELSE 0 END)) AS ''', 
                       DATE_FORMAT(Date, '%b %y'), '''' 
                     )  
                  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;

【讨论】:

    猜你喜欢
    • 2022-01-21
    相关资源
    最近更新 更多