根据表B中列的值从表A列中提取特定单词的T-SQL语法是什么?

时间:2016-12-20 07:18:07

标签: sql-server tsql join match lookup

我正在使用SQL Server 2014,表A中有以下列(称为详细信息):

Details
STD RN
CPL DEL REV
DLX RN
FAS REV
CJS SUP REV
COS RN

我在表B中有一个专栏(名为Category):

Category
STD
CPL DEL
DLX
FAS
CJS SUP
COS

我需要针对表A运行查询,以便我的输出如下:

Details          Category

STD RN             STD
CPL DEL REV        CPL DEL
DLX RN             DLX
FAS REV            FAS
CJS SUP REV        CJS SUP
COS RN             COS

表A和表B之间没有链接。有没有办法编写一个查询,它将查找表A的“详细信息”中的单词,如果它与表中“类别”列中的单词匹配B,那么它将输出表B的值?

1 个答案:

答案 0 :(得分:1)

如果这些字词的顺序始终相同(不是DEL CPLCPL REV DEL),这应该很简单:

DECLARE @Details TABLE(Detail VARCHAR(100));
INSERT INTO @Details VALUES
 ('STD RN')
,('CPL DEL REV')
,('DLX RN')
,('FAS REV')
,('CJS SUP REV')
,('COS RN');


DECLARE @Categories TABLE(Category VARCHAR(100));
INSERT INTO @Categories VALUES
 ('STD')
,('CPL DEL')
,('DLX')
,('FAS')
,('CJS SUP')
,('COS');

SELECT d.Detail
      ,c.Category
FROM @Details AS d
INNER JOIN @Categories AS c ON d.Detail LIKE c.Category + '%'

这会将所有详细信息与(所有)类别(具有相同的开头)组合在一起。

结果

Detail  Category
STD RN  STD
CPL DEL REV CPL DEL
DLX RN  DLX
FAS REV FAS
CJS SUP REV CJS SUP
COS RN  COS

但说实话:你真正应该做的就是改变设计!