2016-02-04 45 views
0

我有兩個來自table1.name和table2.name的名稱列。我在table1.name中有名字,如「Alex Testing」,在table2.name中是「Alexander Testing」。我有桌子做一些其他棘手的事情,但它不承認亞歷克斯和亞歷山大是同一個人,所以它不會在我的報告中包括名稱。我想知道是否有一種方法,我可以通過名字或姓氏將這兩個內部連接加入到內部連接中,就像另一個表具有相同的名字但名稱不同一樣?組合名稱列像另一個

我已經試過:

SELECT 
    Table1.[Name], Table2.[Time], 
    CASE WHEN myvariables here then 0 ELSE 1 END AS columnB 
INTO NewTable 
FROM 
    Table1 INNER JOIN Table2 
     ON Table1.[Name] LIKE ('%' + Table2.Name + '%') 

但它仍然無法正常工作,它不會承認亞歷克斯的名字。

我也試過:

SELECT 
    Table1.[Name], Table2.[Time], 
    CASE WHEN myvariables here THEN 0 ELSE 1 END as columnB 
INTO NewTable 
FROM 
    Table1 INNER JOIN Table2 
     ON Table1.[Name] LIKE CONCAT('%',"Table2.Name", '%') 
+5

我將從將這些列拆分爲姓氏和名字開始 - 因此,聯接條件將非常簡單(無論是姓氏等於或名字,或者甚至兩者)。否則,進行這樣的連接將會非常棘手,並且性能上會很昂貴。 –

+0

這實際上是一個合理的建議。有點像2表比較,加入到第三個單獨的表中名稱上使用通配符? –

+0

不太清楚爲什麼你需要第三張桌子。至於我 - 在現有的表格中,單獨的Last_Name,First_Name而不是Name就足夠了。 –

回答

1

嘗試:

SELECT 
     Table1.[Name], Table2.[Time], 
     CASE WHEN myvariables here then 0 ELSE 1 END AS columnB 
    INTO NewTable 
    FROM 
     Table1 INNER JOIN Table2 
      ON SUBSTRING(Table1.[Name], CHARINDEX(' ', Table1.[Name]) + 1, LEN(Table1.[Name])) = SUBSTRING(Table2.[Name], CHARINDEX(' ', Table2.[Name]) + 1, LEN(Table2.[Name])) 

如果你有大量的表,你可能希望使用子查詢和選擇直接lastnames,然後使用上lastnames聯接。

+0

Msg 102,Level 15,State 1,Line 60 '='附近的語法不正確。 這是我得到的錯誤 –

+1

@Sam是的,我更新了我的查詢。 –

+0

這確實帶來了一些以前不存在的名字,所以確實有效!不過,有些名稱仍然缺失,所以我可能需要按照上面評論中提出的方法來分隔名稱。 –