2016-06-10 66 views
1

如果它很重要,两列都是tinyintSQL加入部分列数据(SQL Server)

表1

Version 
-------- 
111115 
222226 
333337 

表2

ID Year 
-------- 
5 2015 
6 2016 
7 2017 

我需要加入的ID从表2,如果它等于从表中的版本字段的最后一个值1

版本111115将加入ID 5.我知道如何选择这样的事情,但加入g可行吗?结果是:

111115 5 2015 

TIA!

+1

你可以加入你做出一个字段的任何修改,但也有性能命中。所以你可以加入SUBSTRING(table1.Version,len(version)-1,1)= Table2.ID(如果你想的话)。可能性会很慢。最好的办法是把它放入临时表中,方法是选择子字符串和版本,然后将它加入到Table2中 –

+0

你会有大于9的TABLE2.ID值吗?目前为止的答案都没有解决这种情况。 –

回答

1

可以使用RIGHT()功能来做到这一点:

SELECT * 
FROM Table1 A 
INNER JOIN Table2 B on RIGHT(A.Version,1) = B.ID 

我可能会避免这样做非常多,虽然。这是一个错误的数据库设计。也许列ID添加到表1,并使用:

UPDATE Table1 
SET ID = RIGHT(Version,1) 
+0

这正是我需要的,谢谢! – Joshua

+0

@Joshua没问题,欢呼声 –

1

,因为它们都是整数,你可以尝试模运算符。它需要分割后的剩余部分。所以111115 % 10是5

SELECT * 
FROM Table1 t1 
INNER JOIN Table2 t2 on t1.Version % 10 = t2.ID 
0
Declare @tblTest as table 
(
    id INT, 
    yearName INT 
) 


Declare @tblVersion as table 
(
    VersionNo INT 
) 

INSERT INTO @tblTest values(5,2015) 
INSERT INTO @tblTest values(6,2016) 
INSERT INTO @tblTest values(7,2017) 

INSERT INTO @tblVersion values(111115) 
INSERT INTO @tblVersion values(111116) 
INSERT INTO @tblVersion values(111117) 


select 
*,RIGHT(VersionNo,1) 
from @tblVersion 

SELECT 
* 
FROM @tblTest T1 
LEFT JOIN (SELECT RIGHT(VersionNo,1) AS VersionId,VersionNo FROM @tblVersion) T2 ON T2.VersionId=T1.id