我需要操纵我的机器列,以在品牌为AA时删除前导零。然后,我需要加入所有表格。我可以单独执行每个步骤,但是我不知道如何在一个sql语句中执行所有操作。我没有创建新表的能力。这是我的桌子的例子。所有表都有20列以上。
表1
CUNO CUNM OtherColumnsT1
1 Joe Construction Blah
2 City of A Blah
3 City of B Blah
table2
Make Machine CUNO OtherColumnsT2
AA 0123 3 Blah
ZZ J623 2 Blah
AA 0124 2 Blah
KK 0241 1 Blah
table3
SerialNum HeaderID OtherColumnsT3
J623 1 Blah
123 2 Blah
0241 3 Blah
124 4 Blah
table4
HeaderID SegmentID Color OtherColumnsT4
1 1 R Blah
1 2 G Blah
1 3 Y Blah
2 1 G Blah
2 2 G Blah
3 1 R Blah
4 1 G Blah
在一些帮助下,我得到了这段代码,该代码在处理“机器”列并将其与表3合并方面做得很好。
SELECT *
FROM table2 m
INNER JOIN table3 c
ON m.Machine=c.SerialNum
WHERE m.Machine<>'AA'
UNION ALL
SELECT *
FROM table2 m
INNER JOIN table3 c
ON RIGHT(m.Machine,LEN(m.Machine) - 1)=c.SerialNum
WHERE m.Make='AA'
但是我仍然需要联接表1和4。
我尝试在上述代码中添加更多UNION,但这给我带来了一些错误。
我正在寻找这样的桌子
CUNO CUNM Make Machine HeaderID OtherColumnsT3 SegmentID Color OtherColumnsT4
1 Joe Construction KK 0241 3 Blah 1 R Blah
2 City of A ZZ J623 1 Blah 1 R Blah
2 City of A ZZ J623 1 Blah 2 G Blah
2 City of A ZZ J623 1 Blah 3 Y Blah
2 City of A AA 124 4 Blah 1 G Blah
3 City of B AA 123 2 Blah 1 G Blah
3 City of B AA 123 2 Blah 2 G Blah
答案 0 :(得分:1)
您可以尝试以下方法:
select t1.CUNO, t1.CUNM, t2.Make, t2.Machine, t3.HeaderID, t4.SegmentID, t4.Color
from t1
join t2 on t2.CUNO = t1.CUNO
join t3 on ((t3.SerialNum = t2.Machine and len(t3.SerialNum) = len(t2.Machine)) or
(('0' + t3.SerialNum) = t2.Machine and len(t3.SerialNum) = 3))
join t4 on t4.HeaderId = t3.HeaderID
order by t1.CUNO
答案 1 :(得分:0)
我将join
的逻辑简化为:
on t2.Machine = t3.SerialNum or
(t2.Machine = '0' + t3.SerialNum and t2.make = 'AA')
甚至:
on t2.Machine in (t3.SerialNum, '0' + t3.SerialNum)
我不确定是否真的需要AA
。
主要警告是,在JOIN
中使用此类表达式通常会降低性能。如果这是一个问题,那么您应该问另一个关于性能的问题。