Chr*_*Gow 4 sql sql-server oracle
我有一个数据库表,其中包含部分邮政编码.我正在尝试编写一个查询,该查询将采用邮政编码,并在表中找到与该代码匹配的行尽可能接近.在下面的示例中,邮政编码为"A1A B2E"的Gold客户将匹配第一行,而具有相同邮政编码的青铜客户将匹配第三行
CUST_TYPE | POST_CODE | SHIPPING_SURCHARGE
------------------------------------------
Gold | A1A | 0.99
Gold | A2A | 1.01
Gold | A | 3.00
Bronze | A | 1.05
Silver | A | 1.02
Bronze | B | 1.07
Run Code Online (Sandbox Code Playgroud)
在所有情况下,查询都将通过CUST_TYPE和POST_CODE列进行查询.我希望查询只返回包含与邮政编码最匹配的一行的单行.所以,如果我查询Gold和'A1AB2B',我希望返回第一行(Gold,A1A,0.99),而不是第一行和第三行
SQL-服务器
SELECT TOP (1)
*
FROM yourTable
WHERE CUST_TYPE = @cust_type
AND POST_CODE = LEFT( @postal_code, LEN(POST_CODE) )
ORDER BY LEN(POST_CODE) DESC
Run Code Online (Sandbox Code Playgroud)
神谕
(我现在不能测试:)
SELECT
*
FROM
( SELECT
*
FROM yourTable
WHERE CUST_TYPE = @cust_type
AND POST_CODE = SUBSTR( @postal_code, 1, LENGTH(POST_CODE) )
ORDER BY LENGTH(POST_CODE) DESC
)
WHERE rownum = 1
Run Code Online (Sandbox Code Playgroud)