我有一张这样的表:
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
感谢您的帮助。
更新:刚刚重写了整个问题,因为它不够明确。标题也是错误的,不是多个字段成行,而是相反:多行到字段。对不起。
答案 0 :(得分:0)
我认为在MySQL存储过程或编程语言中传递游标操作可以更有效。将所有这些复杂的关系合并到一个查询中并不容易实现,审查或维护。
这是使用临时表来构建和保存结果的另一种解决方案,其中t1是原始数据表,t3是结果表。
file.open(stderr, QIODevice::WriteOnly);
您可以将其构建到存储过程中并添加参数以限制范围。
或者您可以将其构建为更新计划表的预定作业。