2009-02-02 32 views
12

我在SQL Server中编写了一个SQL查询,我需要用一个字符串值替换多个字符串值。例如在SQL查询中替换多个字符串

Product  Quantity 
-------  -------- 
Apple  2 
Orange  3 
Banana  1 
Vegetable 7 
Dairy  6 

将成为

Product  Quantity 
-------  -------- 
Fruit  2 
Fruit  3 
Fruit  1 
Vegetable 7 
Dairy  6 

我知道如何做到这一点的唯一方法是使用嵌套替换SELECT子句。

SELECT 
    REPLACE('Banana', REPLACE('Orange', REPLACE('Banana', Product, 'Fruit'), 
      'Fruit'), 'Fruit') AS Product 
FROM 
    Table 

有没有更简单的方法?

编辑:产品类别中可能有其他值。参见上面的编辑示例。

回答

20

BradC有最好的答案至今,但如果你是出于某种原因无法创建附加的表我想后基比的答案的适应:

SELECT 
    CASE WHEN Product IN ('Banana', 'Apple', 'Orange') Then 'Fruit' 
    ELSE Product END 
FROM [Table] 
1

如果没有其他产品比提到的那些,你可以这样做:

SELECT 'Fruit' AS Product, 
     Quantity 
FROM Table 

如果有其他产品强制添加一个WHERE子句

WHERE Product IN ('Banana', 'Orange', 'Apple') 
7
Select 
Case Product WHEN 'Banana' Then 'Fruit' 
WHEN 'Apple' Then 'Fruit' 
WHEN 'Orange' Then 'Fruit' 
ELSE Product 
END 
FROM Table 
+0

这是有帮助的。谢谢。 – 2009-02-02 18:10:30

11

创建一个新的“类别”表中包含您的产品列表以及它们所属的“类别”。

然后只是做一个内部连接。

+0

我想到的第一件事。 – dotjoe 2009-02-02 15:56:48

+2

+1这就是做这件事的方法 – SQLMenace 2009-02-02 16:23:57

1

您可以使用单个“产品”列创建临时表,并插入要替换的所有产品名称。

然后针对目标表进行内部联接以进行更新。

UPDATE 
    Table 
SET Product = 'Fruit' 
FROM 
    Table t1 INNER JOIN #Table t2 on t1.Product = t2.Product 
0

单引号来分隔文本SQL:

CASE WHEN ShiptoPlant IN (';','/',' ') Then '' ELSE ShipToPlant END