2016-06-10 68 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