SQL - 仅选择语句:如何创建类似于" Vlookup"?

时间:2018-03-29 11:38:59

标签: sql sql-server temp-tables

我是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语句中执行它而不创建新表(我不太清楚这对于临时表是如何工作的。)

任何想法?

1 个答案:

答案 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来限制它。