【发布时间】:2016-10-11 11:28:31
【问题描述】:
IF OBJECT_ID('tempdb..#TABLE1') IS NOT NULL DROP TABLE #TABLE1
IF OBJECT_ID('tempdb..#TABLE2') IS NOT NULL DROP TABLE #TABLE2
CREATE TABLE #TABLE1
(
CODE_NAME_T1 NVARCHAR(20)
)
CREATE TABLE #TABLE2
(
CODE_NAME_T2 NVARCHAR(20)
)
INSERT INTO #TABLE1(CODE_NAME_T1)
VALUES ('BBX123')
,('B/X230')
,('1BC030')
,('BB01BC')
,('BN01BB')
INSERT INTO #TABLE2(CODE_NAME_T2)
VALUES ('B')
,('BB')
--SELECT 1
SELECT T1.CODE_NAME_T1
,'CODE_NAME_T2' = (SELECT TOP 1 T2.CODE_NAME_T2
FROM #TABLE2 T2
WHERE T1.CODE_NAME_T1 LIKE '%' + T2.CODE_NAME_T2 + '%')
FROM #TABLE1 T1
--SELECT 2
SELECT T1.CODE_NAME_T1
,T2.CODE_NAME_T2
FROM #TABLE1 T1
LEFT OUTER JOIN #TABLE2 T2
ON T1.CODE_NAME_T1 LIKE '%' + T2.CODE_NAME_T2 + '%'
IF OBJECT_ID('tempdb..#TABLE1') IS NOT NULL DROP TABLE #TABLE1
IF OBJECT_ID('tempdb..#TABLE2') IS NOT NULL DROP TABLE #TABLE2
结果
选择 1
CODE_NAME_T1 | CODE_NAME_T2
---------------|----------------
BBX123 | B
B/X230 | B
1BC030 | B
BB01BC | B
BN01BB | B
选择 2
CODE_NAME_T1 | CODE_NAME_T2
---------------|----------------
BBX123 | B
BBX123 | BB
B/X230 | B
1BC030 | B
BB01BC | B
BB01BC | BB
BN01BB | B
BN01BB | BB
在上面的代码中,我试图从#TABLE2 的第二列中获取正确的值,并尝试了两种 SELECT 方法,但没有得到我想要的结果。
问:
基本上我需要的代码应该在#TABLE1 值中查找,如果任何字符出现一次或两次,那么它应该从#TABLE2 中带来正确的值。就像上面第二列的第一个结果一样,所有值都是“B”,但对于“BBX123”应该是“BB”,因为这里“B”字符出现了两次,对于“B/X230”它应该是“B”,因为这里“ B”字符出现一次。
所以完整的结果应该是。
需要结果
CODE_NAME_T1 | CODE_NAME_T2
---------------|----------------
BBX123 | BB
B/X230 | B
1BC030 | B
BB01BC | BB
BN01BB | BB
有什么方法可以实现吗?我需要做某种字符计数吗?
注意-这里的“B”字符是一个示例,因为它可以是在#TABLE1 中出现一次或两次的任何字符
【问题讨论】:
-
table1是否总是有两条记录,一条为单个字符,另一条为 2 个字符? -
也可以有匹配3个字符的记录,如“BBB012”。我认为 3 将是最大值
-
@NzGuy - 这是我的另一个问题。这道题的要求完全不一样。
标签: sql sql-server tsql