mysql - 如何对处于 "full line"模式 SQL 的数据进行分组和重新排列

标签 mysql sql

我将 SQL 数据存储在“整行”中,需要重新排列
原始数据

ID      User    Date            Act1   Act2  Act3  Act4 
1       Aba     2019-04-27      3      1     NULL  2
2       Bob     2019-04-28      1      NULL  2     1
3       Carl    2019-04-28      2      1     1     2
4       Dan     2019-04-29      3      2     1     NULL
5       Aba     2019-04-29      4      7     5     NULL

期望状态(每天和行为)

ID      2019-04-27    2019-04-28   2019-04-29
Act1       3          3            7
Act2       1          1            9
Act3      NULL        3            6
Act4       2          3            NULL

任何指导将不胜感激,谢谢

最佳答案

您可以尝试使用具有条件加重功能的UNION ALL

查询 1:

SELECT 'Act1' Id,
       SUM(CASE WHEN Date = DATE'2019-04-27' THEN Act1 END) '2019-04-27',
       SUM(CASE WHEN Date = DATE'2019-04-28' THEN Act1 END) '2019-04-28',
       SUM(CASE WHEN Date = DATE'2019-04-29' THEN Act1 END) '2019-04-29'
FROM T
UNION ALL
SELECT 'Act2' Id,
       SUM(CASE WHEN Date = DATE'2019-04-27' THEN Act2 END) '2019-04-27',
       SUM(CASE WHEN Date = DATE'2019-04-28' THEN Act2 END) '2019-04-28',
       SUM(CASE WHEN Date = DATE'2019-04-29' THEN Act2 END) '2019-04-29'
FROM T
UNION ALL
SELECT 'Act3' Id,
       SUM(CASE WHEN Date = DATE'2019-04-27' THEN Act3 END) '2019-04-27',
       SUM(CASE WHEN Date = DATE'2019-04-28' THEN Act3 END) '2019-04-28',
       SUM(CASE WHEN Date = DATE'2019-04-29' THEN Act3 END) '2019-04-29'
FROM T
UNION ALL
SELECT 'Act4' Id,
       SUM(CASE WHEN Date = DATE'2019-04-27' THEN Act4 END) '2019-04-27',
       SUM(CASE WHEN Date = DATE'2019-04-28' THEN Act4 END) '2019-04-28',
       SUM(CASE WHEN Date = DATE'2019-04-29' THEN Act4 END) '2019-04-29'
FROM T

Results :

|   Id | 2019-04-27 | 2019-04-28 | 2019-04-29 |
|------|------------|------------|------------|
| Act1 |          3 |          3 |          7 |
| Act2 |          1 |          1 |          9 |
| Act3 |     (null) |          3 |          6 |
| Act4 |          2 |          3 |     (null) |

关于mysql - 如何对处于 "full line"模式 SQL 的数据进行分组和重新排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55953844/

相关文章:

php - mysqli_connect()如何在PHP中工作?

mysql - 如何写Nhibernate Query C# .net Mysql

MySQL 联合缺少括号

mysql - 在不创建其他 View 的情况下计算 SQL 语句

MySQL - 如何通过单个查询获取两列中的行数?

javascript - 我是否总是必须为每张表制作一个 Sequelize 模型文件?

java - 我的 jsp 页面从未加载

MySQL - 使用所选内容更新行

php - 使用 PDO 更新多列和多行

php - 为什么有些数据没有保存在我的数据库中?