我有一个正在迁移到MySQL数据库的电子表格。将来电子表格将无法填写。数据将直接上传到数据库。电子表格现在有两个表格。一个名为Piles,包含产品信息。另一个称为Cubes,包含对产品执行的测试结果。这两个表的样本数据如下:
桩:
+----------+------------+---------+-----------------+
| ID | Date | MouldID | StockCode |
+----------+------------+---------+-----------------+
| 23A42895 | 2017-06-09 | 23A | 250CDJ09.0/0412 |
| 23B42895 | 2017-06-09 | 23B | 250CDJ07.0/0412 |
| 642895 | 2017-06-09 | 6 | 250CDJ09.0/0412 |
| 8642895 | 2017-06-09 | 86 | 250CDJ07.0/0412 |
| 842895 | 2017-06-09 | 8 | 250CDJ09.0/0412 |
+----------+------------+---------+-----------------+
立方体:
+---------+------------+-------------+---------+
| ID | Date | ConcTotalM3 | MouldID |
+---------+------------+-------------+---------+
| 2342895 | 2017-06-09 | 18.1 | 23 |
| 4842895 | 2017-06-09 | 57.9 | 48 |
| 842895 | 2017-06-09 | 108.4 | 8 |
| 1542895 | 2017-06-09 | 154.7 | 15 |
| 6242895 | 2017-06-09 | 204.6 | 62 |
+---------+------------+-------------+---------+
现在手动填写电子表格。当模具ID和日期匹配时,信息全部写在一行上。然后向下拖动立方体表中的数据,直到找到另一个匹配的行并重复该过程。
我的问题是,如何编写一个输出相同的SQL查询。我可以编写一个在日期和MouldID上加入的查询,但这不会导致数据向下拖动#34;请注意,如果MouldID的数字部分匹配,那么该行匹配。 A和B无关紧要。我已经从样本数据中包含了我期望输出的内容以供参考。
+----------+------------+---------+-----------------+-------------+
| ID | Date | MouldID | StockCode | ConcTotalM3 |
+----------+------------+---------+-----------------+-------------+
| 23A42895 | 2017-06-09 | 23A | 250CDJ09.0/0412 | 18.1 |
| 23B42895 | 2017-06-09 | 23B | 250CDJ07.0/0412 | 18.1 |
| 642895 | 2017-06-09 | 6 | 250CDJ09.0/0412 | 18.1 |
| 8642895 | 2017-06-09 | 86 | 250CDJ07.0/0412 | 18.1 |
| 842895 | 2017-06-09 | 8 | 250CDJ09.0/0412 | 108.4 |
+----------+------------+---------+-----------------+-------------+
编辑: 所以我为了清晰起见删除了一些列,因为我认为这是令人困惑的事情。我没有使用MouldID加入。目前我正在使用一个脚本告诉我字母在字符串中的位置。然后我使用left()来获取数字部分。
我无法做的就是让联接工作以使用最后一场比赛,如果它不能与当前行匹配。为了解释我的示例输出,前两行是匹配,因为Cubes表中有一个模具23。模具6没有匹配,因此它使用最后一个匹配(来自上面的行)。对于模具86也是如此。模具8在Cubes表中确实具有匹配,因此它使用它。 我希望这会让事情更加清晰。感谢
SQL小提琴供参考: http://sqlfiddle.com/#!9/6f19df/2
答案 0 :(得分:2)
您可以使用一对嵌套替换来避免A,B并与cubes.ID匹配
select
Date
, a.MouldID
, a.StockCode
, a.Length
, a.Serials
, a.PrintNum
, b.ConcTotalM3
, b.Quantity
, b.Time
....
from Piles a
inner join Cubes b on replace(replace(a.ID, 'A', '') , 'B','') = b.id
向你的sqlfiddle看这场比赛
a.Date
, a.ID
, b.ID
, replace(replace(a.ID, 'A', '') , 'B','')
, a.MouldID
, a.StockCode
, b.ConcTotalM3
from Piles a
inner join Cubes b on replace(replace(a.ID, 'A', '') , 'B','') = b.ID