2017-08-15 101 views
0

我在不同的服務器上有兩個表,我需要鏈接它們有共同的列。但是,來自欄目的數據是非常不同的。SQL比較兩個數據略有差異的列

我有兩張桌子,一張是臨時桌,我有我需要的學生名單,他們的全名,學校,地址和課後課程以及課程ID,每個課程都有一個ID。另一個表格包含所有節目信息及其ID和位置,這些信息目前都在我們的系統中。

另一張表具有所有ID,但該數據長度爲5個字符,並非全部,但大部分數據都以'0'結尾。現在我需要加入這張在我的第一張桌子上有5個字符長的數據的桌子,並且說我的桌子上的ID與我的所有學生都屬於這個ID。

#students

StudentID Lastname  Firstname  dob   Afterschool_program  location   Department  programID 
-------------------------------------------------------------------------------------------- 
81EB  Toreros  Christian   03/26/1999 Teen Dance Exercise  158-Bayshore Theater   5269 
89EB  Willis  Michael   03/15/2002 Arts Painting 158-Mulan Drive Arts   6985 

其他表位置

locationName               Address       LocationID 
---------------------------------------------------------------------------------------------------------------------   
    Bay Shore - DAY Program/Scie- TEEN & YOUNG ADULTS - 52690   BayShore 123-89 place     52690 
Mulan - DAY Program/Arts- TEEN - 96850   BayShore 123-89 place     52690 

問題是我怎麼能加入locationIDprogramID

到目前爲止,我已經試過這

IF OBJECT_ID('tempdb..#locationsID') IS NOT NULL 
    DROP TABLE #locationsID 

SELECT DISTINCT 
    LEFT(RTRIM(LocationID), 4) AS Location_ID, LocationName 
INTO 
    #locationsID 
FROM 
    locationstable 
ORDER BY 
    LocationID 

--select * from #locationsID 

IF OBJECT_ID('tempdb..#locomparison') IS NOT NULL 
    DROP TABLE #locomparison 

SELECT DISTINCT 
    cloc.LocationID, pfm.programID as programID 
INTO 
    #locomparison 
FROM 
    #locationsID cloc 
LEFT OUTER JOIN 
    tablewithlivesystemdata pfm ON pfm.programID = cloc.Location_ID 
ORDER BY 
    LocationID 

--Main 
SELECT 
    programID, LocationID, * 
FROM 
    Students 
JOIN 
    #locomparison ON LocationID.#locomparison = programID.#Students 

但是這不工作:(

+0

什麼是programID和lo的數據類型cationID?當你說不工作時,你有錯誤或執行,但沒有得到期望的結果? –

回答

0

您可以匹配字符串的一部分。如果locationID長5個字符,如下左圖函數返回4個最左邊的字符。

select s.programID, l.LocationID 
from #students s 
join #Locations l on s.programID = LEFT(LocationID, LEN(LocationID)-1); 
0

如果programID和locationID都是整數類型,可以使用CAST()

SELECT * 
    FROM #students s 
    LEFT OUTER JOIN #Locations l 
    ON s.programID = CAST(LEFT(CAST(locationID AS VARCHAR(50)),4) AS INT); 
0

假設這些列VARCHAR,你可以用這樣的條件:

select s.programID, l.LocationID 
from #students s 
join #Locations l on l.LocationID LIKE s.programID + '%'; 

如果他們INT你應該首先將它們轉換爲VARCHAR:

select s.programID, l.LocationID 
from #students s 
join #Locations l on convert(varchar(50), l.LocationID) LIKE convert(varchar(50), s.programID) + '%'; 

另外,如果LocationID始終是10倍大您可以使用以下程序ID:

select s.programID, l.LocationID 
from #students s 
join #Locations l on l.LocationID = s.programID * 10;