Tsql 如何连接两个电话号码表

Tsql 如何连接两个电话号码表,tsql,Tsql,我有两张桌子 第一个表tbl1: name nvarchar(255) number nvarchar(255) 第二个表dbo.phone_代码: country nvarchar(255) code nvarchar(4) 第一个查询: Select Name, Number from dbo.tbl1 我得到的结果是: User1 375xxxxxxxx User1 7xxxxxxxxxx User2 49xxxxxxxxx User1 37552222222 Be

我有两张桌子

第一个表tbl1:

name nvarchar(255)
number nvarchar(255)
第二个表dbo.phone_代码:

country nvarchar(255)
code nvarchar(4)
第一个查询:

Select Name, Number
from dbo.tbl1
我得到的结果是:

User1   375xxxxxxxx
User1   7xxxxxxxxxx
User2   49xxxxxxxxx
User1   37552222222 Belarus 375
User1   77333333333 Russian 7
User2   49111111111 Germany 49
第二个问题:

select country, code
from dbo.phone_codes
我得到的结果是:

Belarus 375
Russian 7
Germany 49
Poland  48
如果我想得到这个结果,我应该使用什么查询:

User1   375xxxxxxxx
User1   7xxxxxxxxxx
User2   49xxxxxxxxx
User1   37552222222 Belarus 375
User1   77333333333 Russian 7
User2   49111111111 Germany 49
第一个表:

name - nvarchar(255)
number - nvarchar(255)
第二个表:

country - nvarchar(255)
code - nvarchar(4)
试试这个

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 + '%'

假设您的电话号码和国家代码只包含数字,没有空格、括号、破折号或加号。您可以尝试以下方法:

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)等情况

数字列和代码列的数据类型是什么?显示两个表的表结构。为什么不清理该表并将代码放在另一列中?您可以使用一个计算列来组合它们。巴哈马代码为1242,美国代码为1。它将显示美国和巴哈马统治下的巴哈马的电话号码。百慕大和安提瓜代码也从1开始。您得到的结果是错误的还是不正确的?你能用这个例子吗。这样就很容易看到你的问题。