我需要在一个列上联接表,该列需要根据另一列的条件进行操作。
表1
Make SerialNumber Client
AA 0123 1
AA 0124 1
KK J642 1
ZZ 0444 2
table2
SerialNumber Color
123 Red
124 Green
J642 Green
0444 Yellow
我对SQL还是很陌生,过去我做过类似
Select * RIGHT(RTRIM(SerialNumber),LEN(SerialNumber)-1) from Table1 where Make = 'AA'
但是现在我需要更多的参与。
我需要能够基于SerialNumber加入两个表。基本上,我需要使table1 SerialNumber看起来像table2 SerialNumber并将它们全部合并到一个SQL语句中。我没有编辑表格或创建新表格的能力。如果第一个表中的make是AA,则需要删除第一个字符,在我的情况下,该字符始终为零。
目标是拥有这个
Make SerialNumber Client Color
AA 123 1 Red
AA 124 1 Green
KK J642 1 Green
ZZ 0444 2 Yellow
答案 0 :(得分:1)
使用UNION处理Make的两种情况:
SELECT m.Make,m.SerialNumber,m.Client,c.Color
FROM table1 m
INNER JOIN table2 c
ON m.SerialNumber=c.SerialNumber
WHERE m.Make<>'AA'
UNION ALL
SELECT m.Make,c.SerialNumber,m.Client,c.Color
FROM table1 m
INNER JOIN table2 c
ON RIGHT(m.SerialNumber,LEN(m.SerialNumber) - 1)=c.SerialNumber
WHERE m.Make='AA'
答案 1 :(得分:0)
使用SUBSTRING
和PATINDEX
删除0
子句中的前ON
:
select
t1.make, t2.serialnumber, t1.client, t2.color
from table1 t1 inner join table2 t2
on
case
when isnumeric(t1.serialnumber) = 1
then substring(t1.serialnumber, patindex('%[^0]%', t1.serialnumber), len(t1.serialnumber))
else t1.serialnumber
end =
case
when isnumeric(t2.serialnumber) = 1
then substring(t2.serialnumber, patindex('%[^0]%', t2.serialnumber), len(t2.serialnumber))
else t2.serialnumber
end
请参见demo。
结果:
make | serialnumber | client | color
:--- | :----------- | -----: | :-----
AA | 123 | 1 | Red
AA | 124 | 1 | Green
KK | J642 | 1 | Green
ZZ | 0444 | 2 | Yellow