我是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语句中执行它而不创建新表(我不太清楚这对于临时表是如何工作的。)
任何想法?
答案 0 :(得分:0)
您可以使用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匹配多个case)。如果是这种情况,您可以使用表的主键上的GROUP BY来限制它。