mysql - mysql中的复杂旋转
问题描述
我在 MySQL 中有一个包含数据的表,我想从表中实现某种旋转,这对我来说变得很复杂。我试过调查这个,但似乎没有什么对我有用。这是我的表的结构:
roomid| day| 1 | 2 | 3 | 4 | 5 | 6 |
------+----+---+---+---+---+---+---+
1 | 1 |BIO| | | | | |
1 | 2 | |CHE| | | | |
1 | 3 | | | | | |ENG|
1 | 4 | | |KIS| | | |
1 | 5 | | | | | |PHY|
2 | 1 |BIO| | | | | |
2 | 2 | |CHE| | | | |
2 | 3 | | | | |ENG| |
2 | 4 | | |KIS| | | |
2 | 5 | | | | | |PHY|
该表保存时间表数据,roomid 是房间的 id,日期是从星期一到星期五(1 到 5)的天数。第 1 到第 6 列是周期 ID。我需要组织数据以实现每天显示每个班级的期间 id 的结果。像这样的东西:
|roomid| 1 | 2 | 3 | 4 | 5 | 6 | 1 | 2 | 3 | 4 | 5 | 6 | 1 | 2 | 3 | 4 | 5 | 6 | 1 | 2 | 3 | 4 | 5 | 6 | 1 | 2 | 3 | 4 | 5 | 6 |
-------+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
1 |BIO| | | | | | |CHE| | | | | | | | | |ENG| | |KIS| | | | | | | | |PHY|
2 |BIO| | | | | | |CHE| | | | | | | | | |ENG| | |KIS| | | | | | | | |PHY|
请注意,期间 ID 会在不同的日子重复。
解决方案
您可以使用条件聚合:
select room_id,
max(case when day = 1 then slot_1 end) as day_1_slot_1,
max(case when day = 1 then slot_2 end) as day_1_slot_2,
. . .
max(case when day = 2 then slot_1 end) as day_2_slot_1,
max(case when day = 2 then slot_2 end) as day_2_slot_2,
. . .
from schedule s
group by room_id
推荐阅读
- android - 如果来自不同库/sdks 的两个具有不同版本号的 resolutionStrategy 会得到什么?
- python - Python:numpy,pandas,并对前一个数组值执行操作(平滑平均值):有什么方法可以不使用 FOR 循环?EWMA?
- php - 如何将html和php结果保持在一行
- iis - 尝试查询 Active Directory 时出错 - 需要应用程序池回收
- google-apps-script - 谷歌表格 - 脚本慢 - 依赖下拉
- python - 如何将动态创建的 qmlcomponent 对象绑定到另一个动态创建的 qmlcomponent 对象的属性?
- ios - System.Security.Authentication.AuthenticationException:
- r - R 箱线图,已计算均值、置信区间和最小值最大值
- apache-camel - 将嵌入式码头与 camel-cxf 结合使用
- android - 从最近的屏幕滑动应用程序后的 Activity 生命周期