且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

需要有关在具有多个日期列的 mysql 中 unpivot 的帮助

更新时间:2023-02-06 17:48:05

我在 MySQL 8.0.1 上测试了以下内容:

I tested the following on MySQL 8.0.1:

SELECT GROUP_CONCAT(
  CONCAT(
    'SELECT `Product Type`, ', 
       QUOTE(COLUMN_NAME), ' AS `Date`, ',
       '`', COLUMN_NAME, '` AS `Revenue` ',
    'FROM testing_unpivot'
  ) SEPARATOR ' UNION ALL '
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'testing_unpivot'
AND COLUMN_NAME <> 'Product Type';

使用QUOTE() 函数 使它更简单,因为它消除了计算三引号和四引号的需要.

Using the QUOTE() function makes it simpler, because it eliminates the need to figure out the triple vs. quad quotes.

输出:

SELECT `Product Type`, '01-31-2016' AS `Date`, `01-31-2016` AS `Revenue` FROM testing_unpivot 
UNION ALL 
SELECT `Product Type`, '02-29-2016' AS `Date`, `02-29-2016` AS `Revenue` FROM testing_unpivot 
UNION ALL 
SELECT `Product Type`, '12-31-2015' AS `Date`, `12-31-2015` AS `Revenue` FROM testing_unpivot

然后我做了复制&粘贴以运行该查询并获得此输出:

Then I did copy & paste to run that query and got this output:

+--------------+------------+---------+
| Product Type | Date       | Revenue |
+--------------+------------+---------+
| A            | 01-31-2016 |  400.00 |
| B            | 01-31-2016 |   86.88 |
| C            | 01-31-2016 |  400.00 |
| D            | 01-31-2016 |   55.00 |
| E            | 01-31-2016 |  455.00 |
| A            | 02-29-2016 |   55.00 |
| B            | 02-29-2016 |   55.00 |
| C            | 02-29-2016 |   55.00 |
| D            | 02-29-2016 |   11.00 |
| E            | 02-29-2016 |   22.00 |
| A            | 12-31-2015 |  100.00 |
| B            | 12-31-2015 |    0.00 |
| C            | 12-31-2015 |  200.00 |
| D            | 12-31-2015 |  300.00 |
| E            | 12-31-2015 |  400.00 |
+--------------+------------+---------+

我刚刚用前三个日期的数据加载了我的测试数据.

I just loaded my test data with your first three dates worth of data.