![](/img/trans.png)
[英]SQL pivot with dayValue [dealing with date in pivot-table] MYSQL-solution
[英]How to get a pivot-table like result using MySQL
假设我们在 mysql:test 中有一个表;
如何在 excel 中获得类似 pivot 表的结果表?
尝试使用“合并”,但 mysql 不支持它。
尝试使用“联合”,但增加的是索引而不是列。
select * from test;
Output
+----+------------+------+-------+
| id | date | name | value |
+----+------------+------+-------+
| 1 | 2019-01-01 | a | 1 |
| 2 | 2019-01-02 | a | 2 |
| 3 | 2019-01-03 | a | 3 |
| 4 | 2019-01-04 | a | 4 |
| 5 | 2019-01-05 | a | 5 |
| 6 | 2019-01-06 | a | 6 |
| 7 | 2019-01-03 | b | 9 |
| 8 | 2019-01-04 | b | 9 |
| 9 | 2019-01-05 | b | 8 |
| 10 | 2019-01-06 | b | 7 |
| 11 | 2019-01-05 | c | 5 |
| 12 | 2019-01-06 | c | 6 |
| 13 | 2019-01-07 | c | 7 |
| 14 | 2019-01-08 | c | 8 |
| 15 | 2019-01-09 | c | 9 |
+----+------------+------+-------+
想得到:
+------------+---+---+---+
| date | a | b | c |
+------------+---+---+---+
| 2019-01-01 | 1 | | |
| 2019-01-02 | 2 | | |
| 2019-01-03 | 3 | 9 | |
| 2019-01-04 | 4 | 9 | |
| 2019-01-05 | 5 | 8 | 5 |
| 2019-01-06 | 6 | 7 | 6 |
| 2019-01-07 | | | 7 |
| 2019-01-08 | | | 8 |
| 2019-01-09 | | | 9 |
+------------+---+---+---+
我知道在 Excel 中很容易得到结果,但是如何使用 SQL?
编辑:
一个跟随的问题。
如果我不知道“名称”列中的名称是什么?
也就是说,可能有a,b,c,d,e,f,g...但我不知道有多少不同的名字。
如何通过列出所有这些来获得结果? ()
+------------+---+---+---+
| date | a | b | c |...... and so on.
+------------+---+---+---+
您可以使用CASE
和GROUP_CONCAT
来获得所需的 output。 好的做法是避免保留字如name
、 date
、 value
SELECT date,
GROUP_CONCAT(CASE WHEN name='a' THEN value END) as 'a',
GROUP_CONCAT(CASE WHEN name='b' THEN value END) as 'b',
GROUP_CONCAT(CASE WHEN name='c' THEN value END) as 'c'
FROM test GROUP BY `date`;
编辑:可以通过使用prepared statement
创建动态查询来实现。
由于要value
特定日期的列求和,因此与SUM
共享查询。 如果需要,您可以替换为GROUP_CONCAT
。
SELECT
GROUP_CONCAT(CONCAT(" SUM(CASE WHEN name='",name,"' THEN value END) AS '",name,"'"))
INTO @pivotcol
FROM (SELECT `name` FROM test GROUP BY `name`) t;
SET @pivotquery =CONCAT("SELECT date, ",@pivotcol," from test GROUP BY `date`");
PREPARE stmt FROM @pivotquery;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.