Подтвердить что ты не робот

Заменить несколько строк в SQL-запросе

Я пишу SQL-запрос в SQL Server, в котором мне нужно заменить несколько строковых значений на одно строковое значение. Например

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

станет

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

Единственным способом, которым я знаю, как это сделать, является использование вложенного REPLACE в предложении SELECT.

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

Есть ли более простой способ?

EDIT: в категории "Продукт" могут быть другие значения. См. Отредактированный пример выше.

4b9b3361

Ответ 1

У BradC есть лучший ответ, но если вы по какой-то причине не смогли создать дополнительную таблицу, я хотел бы опубликовать адаптацию ответа Кибби:

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

Ответ 2

Создайте новую таблицу "категории", в которой есть список ваших продуктов, а также "категория", к которой они принадлежат.

Затем просто сделайте внутреннее соединение.

Ответ 3

Select
Case Product WHEN 'Banana' Then 'Fruit'
WHEN 'Apple' Then 'Fruit'
WHEN 'Orange' Then 'Fruit'
ELSE Product
END
FROM Table

Ответ 4

Если нет других продуктов, кроме указанных, вы можете:

SELECT 'Fruit' AS Product,
        Quantity
FROM Table

Если есть другие продукты, добавьте предложение WHERE

WHERE Product IN ('Banana', 'Orange', 'Apple')

Ответ 5

Вы можете создать временную таблицу с колонкой "Продукт" с одним столбцом и вставить все имена продуктов, которые вы хотите заменить.

Затем выполните внутреннее соединение с целевой таблицей для вашего обновления.

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

Ответ 7

Одиночные кавычки для разграничения текста в SQL:

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