【问题标题】:Complex pivoting in mysqlmysql中的复杂旋转
【发布时间】:2020-01-20 15:43:07
【问题描述】:

我在 MySQL 中有一个包含数据的表,我想从表中实现某种旋转,这对我来说变得很复杂。我试过调查this,但似乎没有什么对我有用。这是我表的结构:

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 会在不同的日子重复。

【问题讨论】:

  • 认真考虑 a) 修改架构,b) 处理应用程序代码中的数据显示问题。
  • @Strawberry 我已经尝试在我的数据库中重组表,我已经在这个项目上工作了 1 个半月,这是可以轻松使用该项目的最简单的解决方案。跨度>

标签: mysql sql heidisql


【解决方案1】:

您可以使用条件聚合:

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

【讨论】:

  • 让我尝试实现它,我会告诉你它是否有效。
【解决方案2】:

虽然没有声称是最终解决方案,但规范化设计可能有点如下。坦率地说,现在的设计在某种程度上比这更合适。

+--------+-----+------+---------+
| roomid | day | slot | subject |
+--------+-----+------+---------+
|      1 |   1 |    1 | BIO     |
|      2 |   1 |    2 | BIO     |
|      1 |   2 |    2 | CHE     |
|      2 |   2 |    2 | CHE     |
|      1 |   4 |    3 | KIS     |
|      2 |   4 |    3 | KIS     |
|      2 |   3 |    5 | ENG     |
|      1 |   3 |    6 | ENG     |
|      1 |   5 |    6 | PHY     |
|      2 |   5 |    6 | PHY     |
+--------+-----+------+---------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 2023-03-20
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 2012-04-09
    相关资源
    最近更新 更多