2009-02-02 35 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