我正在SQL Server中编写一个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子句中使用嵌套的REPLACE。
SELECT
REPLACE('Banana', REPLACE('Orange', REPLACE('Banana', Product, 'Fruit'),
'Fruit'), 'Fruit') AS Product
FROM
Table
有更简单的方法吗?
编辑:产品类别中可能还有其他值。见上面编辑的例子。
答案 0 :(得分:20)
SELECT
CASE WHEN Product IN ('Banana', 'Apple', 'Orange') Then 'Fruit'
ELSE Product END
FROM [Table]
答案 1 :(得分:11)
制作一个新的“类别”表,其中包含您的产品列表以及它们所属的“类别”。
然后做一个内部联接。
答案 2 :(得分:7)
Select
Case Product WHEN 'Banana' Then 'Fruit'
WHEN 'Apple' Then 'Fruit'
WHEN 'Orange' Then 'Fruit'
ELSE Product
END
FROM Table
答案 3 :(得分:1)
如果没有其他产品,您可以这样做:
SELECT 'Fruit' AS Product,
Quantity
FROM Table
如果还有其他产品,请添加WHERE子句
WHERE Product IN ('Banana', 'Orange', 'Apple')
答案 4 :(得分:1)
您可以使用单个列“产品”列创建临时表,并插入要替换的所有产品名称。
然后针对目标表进行内部联接以进行更新。
UPDATE
Table
SET Product = 'Fruit'
FROM
Table t1 INNER JOIN #Table t2 on t1.Product = t2.Product
答案 5 :(得分:0)
从长远来看,建立“类别”表的建议将是您的最佳选择。
有关示例,请查看以下链接:Data belongs in your tables - not in your code
答案 6 :(得分:0)
用于在SQL中分隔文本的单引号:
CASE WHEN ShiptoPlant IN (';','/',' ') Then '' ELSE ShipToPlant END