我对stackoverflow是个新手,所以希望我的措辞足够清楚。
我在sql服务器上有很多数据,只能使用SELECT语句来提取数据。我现在希望从部件名称中提取出特定的部件,这样我就可以看到我们使用了多少这种类型:
SELECT CASE
WHEN Part.Part_No like '%B-123%' THEN 'B-123'
WHEN Part.Part_No like '%B-456%' THEN 'B-456'
WHEN Part.Part_No like '%IW-10%' THEN 'IW-10'
WHEN Part.Part_No like '%T-TLT%' THEN 'T-TLT'
WHEN Part.Part_No like '%B-TLT3060%' THEN 'B-TLT3060'
ELSE NULL END AS Type
FROM dbo.CATEGORY因此,我想知道是否可以将这些行添加到表中,然后像VLookup一样遍历该表,而不是编写成百上千行。但我只能在select语句中执行此操作,而无需创建新表(我不太确定这对于临时表是如何工作的)。
有人有什么想法吗?
发布于 2018-03-29 20:29:15
您可以使用CTE来管理您的查找表。然后,您可以使用LIKE作为连接子句来连接(左连接)您的表和查找表。
这个查询应该能做到这一点:
WITH cte AS (SELECT '%B-123%' AS a, 'B-123' AS b
UNION SELECT '%B-456%', 'B-456'
UNION SELECT '%IW-10%', 'IW-10'
UNION SELECT '%T-TLT%', 'T-TLT'
UNION SELECT '%B-TLT3060%', 'B-TLT3060')
SELECT c.b
FROM dbo.CATEGORY t
LEFT OUTER JOIN cte c
ON Part.Part_No LIKE c.a根据您的数据和表结构,它可能会为每一行获得多个结果(如果一个part_no匹配多个案例)。如果是这种情况,您可以使用表的主键上的GROUP BY进行限制。
https://stackoverflow.com/questions/49555093
复制相似问题