我需要找出最好的方法来做到这一点 - 这是一个例子。假设您要拨打 England: 并且您要拨打的号码是: 447400123456
。现在您可以使用三个不同的长途提供商,但它们都有不同的费率。有一个像这样的 LD 费率表:
VendorID Dialcode Description Rate
------------------------------------------------------
1 44 UK - All 0.01
1 447 UK - Mobile 0.02
2 44 UK - All 0.015
3 44 UK - All 0.013
3 44740 UK - Mobile - Hutch 0.01
我需要一个可以匹配并返回每个供应商电话号码的最大数字的查询 - 因此对于上面的数字,它应该返回:
VendorID Dialcode Description Rate
------------------------------------------------------
1 447 UK - Mobile 0.02
2 44 UK - All 0.015
3 44740 UK - Mobile - Hutch 0.01
我希望除了用循环缩小数字之外,还有其他可以做的事情。另外,如果表上应该有一个索引来加快处理速度 - 你有什么建议?
最佳答案
您可以使用 ROW_NUMBER() OVER(PARTITION BY VendorID ORDER BY LEN(DialCode)
获取每个 VendorID
的最大位数:
SQL Fiddle
DECLARE @telNo VARCHAR(50) = '447400123456';
WITH Cte AS(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY VendorID ORDER BY LEN(DialCode) DESC)
FROM tbl
WHERE @telNo LIKE DialCode + '%'
)
SELECT
VendorID, DialCode, Description, Rate
FROM Cte
WHERE RN = 1
结果 :
| VendorID | DialCode | Description | Rate |
|----------|----------|---------------------|-------|
| 1 | 447 | UK - Mobile | 0.02 |
| 2 | 44 | UK - All | 0.015 |
| 3 | 44740 | UK - Mobile - Hutch | 0.01 |
关于sql - 如何根据电话号码找到长途费率的最佳匹配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31778141/