MySQL跨越字段中的多行

时间:2015-06-09 20:44:14

标签: mysql sql pivot

我有一张这样的表:

Trans Time_In Placard Container Sztp Line Time_Out   
===== ======= ======= ========= ==== ==== ========
IN    10:15   254114  CLHU12345 40DH MAE  10:54   <In transaction
OUT   10:15   254114  MAEU45678 20DR SEA  10:54   <Out Transaction (same placard)
OUT   10:15   254114  TTNU98765 20DR CHI  10:54   <Out Transaction (same placard)

IN    11:23   664524  FSCU13479 40RH SEB  11:55   <In transaction
OUT   11:23   664524  PONU55588 40DR MAB  11:55   <Out Transaction (same placard)

IN    13:01   542234  TLHU77665 40RH MOL  13:23   <In transaction (no out)

OUT   13:36   232212  MLHU22341 20DR CMD  13:49   <Out Transaction (no in)

OUT   14:03   187852  AMFU56041 20DR CMD  14:48   <Out Transaction (no in)
OUT   14:03   187852  CCLU44112 20DR CHN  14:48   <Out Transaction, same placard (no in)

是一张卡车台进出终端放下一个容器,有时候选择一个40&#34;或两个20&#34;出门。有时卡车司机只是放下一个容器而空着走,所以没有OUT交易。或者它可能是空的来挑选一个完整的容器,所以没有IN交易,但只有一两个OUT,如果他选择一个40或两个20。每个标语牌的Time In和Time out都是相同的,所以我可以从任何记录中获取它,所以不用担心。

关键是Time_In + Placard,因为同一个标语牌可以进行多次进出。每次旅行的时间戳都完全相同。

我最终需要这样的事情:

Trans Time In Placard Cont1     Sztp1  Line1 Cont2     Sztp2 Line2 Cont3     Sztp3 Line3 Time Out
===== ======= ======= ========= =====  ===== ========= ===== ===== ========= ===== ===== ========
IN    10:15   254114  CLHU12345 40DH   MAE   MAEU45678 20DR  SEA   TTNU98765 20DR  CHI   10:54
IN    11:23   664524  FSCU13479 40RH   SEB   PONU55588 40DR  MAB   null      null  null  11:55
IN    13:01   542234  TLHU77665 40RH   MOL   null      null  null  null      null  null  13:23
OUT   13:36   232212  MLHU22341 20DR   CMD   null      null  null  null      null  null  13:49
OUT   14:03   187852  AMFU56041 20DR   CMD   CCLU44112 20DR  CHN   null      null  null  14:48

感谢您的帮助。

更新:刚刚重写了整个问题,因为它不够明确。标题也是错误的,不是多个字段成行,而是相反:多行到字段。对不起。

1 个答案:

答案 0 :(得分:0)

我认为在MySQL存储过程或编程语言中传递游标操作可以更有效。将所有这些复杂的关系合并到一个查询中并不容易实现,审查或维护。

这是使用临时表来构建和保存结果的另一种解决方案,其中t1是原始数据表,t3是结果表。

file.open(stderr, QIODevice::WriteOnly);

您可以将其构建到存储过程中并添加参数以限制范围。

或者您可以将其构建为更新计划表的预定作业。