gpt4 book ai didi

MySQL 一些行到列

转载 作者:行者123 更新时间:2023-11-30 22:42:23 25 4
gpt4 key购买 nike

我在 MySQL 中有一个这样的表:

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 英寸或两个 20 英寸的容器运出(3 笔交易,因此有 3 行)。有时,卡车司机只是丢下一个容器然后空着走了(1 笔交易),因此没有 OUT 交易。或者它可能是空的来挑选一个完整的容器(1 笔交易),所以没有 IN 交易,但只有一两个 OUT(2 笔交易),如果他挑选一个 40 或两个 20。有时甚至有两个 20 英尺进场,也有 2 个 20 英尺进场,有 4 笔交易。每个标语牌的入场时间和出场时间都是相同的,所以我可以从任何记录中获取它,所以不用担心。

关键是 Time_In + Placard,因为同一张 placard 可以在同一天进行多次进出。每次旅行的时间戳完全相同。

最终,每次行程不会超过 4 个交易,我们需要每个行程的单行报告,显示每个交易详细信息(容器、sztp 和线路),如果它只有一两个,其他剩余的交易明细将为空。对于那些不熟悉海事术语的人,sztp 表示尺寸/类型,例如 40DR 表示 40 英尺干燥,20DR 表示 20 英尺干燥,40RH 表示 40 英尺冷藏柜高,等等。

我需要以这样的方式结束:

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

此表的预期用途是用于 BIRT 报告。

感谢您的帮助。

顺便说一句,我已经问过类似的问题,但是一开始不是很清楚,所以我向管理员报告并发布了这个。对此表示歉意。希望你能帮助我。

最佳答案

BIRT 交叉表可以处理这个,例如 this report离您想要做的很近:它将 5 个订单行转换为列。 enter image description here 1

此选项的优点是,这是完全动态的:我们不必在任何地方对每个行号的字段进行硬编码,例如 Cont1、Cont2、Sztp1、Sztp2 等。

要在您的上下文中实现相同的目的,您需要为每笔交易指定一个行号。可以在 MySQL 存储过程中或在 BIRT 数据集的计算列中计算这样的行号,方法是检查当前行的“Time in”和“Placard”值是否与前一行不同。当然查询需要通过“Time-In”+“Placard”来排序交易。

一旦行号在数据集中可用,我们就可以设计一个包含 2 个组和 2 个度量的数据立方体

  • 第一组:“Time-In”+“Placard”。添加子级别以在单独的列中显示这些字段,例如屏幕截图中的“订单”和“日期”。
  • 第二组:行号
  • 措施 1:字段:“容器”类型:STRING AggregateFunction:FIRST
  • 措施 2:字段:“Sztp”类型:STRING AggregateFunction:FIRST

关于MySQL 一些行到列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30765461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com