Tsql 如何连接两个电话号码表
我有两张桌子 第一个表tbl1: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
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开始。您得到的结果是错误的还是不正确的?你能用这个例子吗。这样就很容易看到你的问题。