2014-03-26 37 views
0

我有兩個表。如何加入兩個電話號碼錶

第一個表TBL1:

name nvarchar(255) 
number nvarchar(255) 

第二個表dbo.phone_codes:

country nvarchar(255) 
code nvarchar(4) 

第一個查詢:

Select Name, Number 
from dbo.tbl1 

我得到這個結果:

User1 375xxxxxxxx 
User1 7xxxxxxxxxx 
User2 49xxxxxxxxx 

第二個查詢:

select country, code 
from dbo.phone_codes 

我得到的結果:

Belarus 375 
Russian 7 
Germany 49 
Poland 48 

,如果我想要得到這樣的結果,我應該怎麼使用查詢:

User1 37552222222 Belarus 375 
User1 77333333333 Russian 7 
User2 49111111111 Germany 49 

第一個表:

name - nvarchar(255) 
number - nvarchar(255) 

第二個表:

country - nvarchar(255) 
code - nvarchar(4) 
+0

數字和代碼列的數據類型是什麼? – KrazzyNefarious

+0

顯示兩個表的表結構。 – Rahul

+0

爲什麼不清理表格並將代碼放入另一列?你可以有一個計算列來組合它們。 – Paparazzi

回答

1

試試這個

SELECT 
t.Name, t.Number, p.country, p.code 
FROM dbo.tbl1 t 
INNER JOIN dbo.phone_codes p 
    ON t.Number LIKE p.code + '%' 
+0

巴哈馬代碼是1242,美國代碼是1.它會顯示一個來自美國和巴哈馬的巴哈馬的電話號碼。百慕大和安提瓜代碼也從1開始。 –

0
SELECT 
    t.Name, t.Number, p.Country, p.Cpde  
FROM 
    dbo.tbl1 t, dbo.phone_codes p 
WHERE 
    charindex(p.Code, t.Number) = 1 
0

假設你的電話號碼和國家代碼僅由數字組成,不能有空格,括號,破折號或加號。你可以嘗試這樣的事情:

SELECT * 
    FROM( 
     SELECT T.Name , 
       T.Number , 
       P.country , 
       P.code ,      
       RANK() OVER(PARTITION BY T.Number 
          ORDER BY ISNULL(CAST(P.code AS int), 1) DESC)RNK 
      FROM 
       dbo.tbl1 T LEFT JOIN dbo.phone_codes P 
       ON T.Number LIKE P.Code + '%' 
    )A 
    WHERE A.RNK = 1; 

如果你有特殊字符,你需要使用replace功能,以消除任何非數字字符。

排名函數用於解決像百慕大(1441)和美國(1)的情況。

+0

它不能正確顯示結果:( –

+0

)您是否收到錯誤或不正確的結果?您可以使用[sqlfiddle.com](http://sqlfiddle.com/)創建一個示例#!3)。這樣就很容易看到你的問題。 –