Заменить несколько строк в SQL-запросе - PullRequest
12 голосов
/ 02 февраля 2009

Я пишу 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

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

РЕДАКТИРОВАТЬ: в категории продукта могут быть другие значения. См. Отредактированный пример выше.

Ответы [ 7 ]

20 голосов
/ 02 февраля 2009

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

SELECT
    CASE WHEN Product IN ('Banana', 'Apple', 'Orange') Then 'Fruit'
    ELSE Product END 
FROM [Table]
11 голосов
/ 02 февраля 2009

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

Тогда просто сделайте внутреннее соединение.

7 голосов
/ 02 февраля 2009
Select
Case Product WHEN 'Banana' Then 'Fruit'
WHEN 'Apple' Then 'Fruit'
WHEN 'Orange' Then 'Fruit'
ELSE Product
END
FROM Table
1 голос
/ 02 февраля 2009

Можно создать временную таблицу с одним столбцом «Продукт» и вставить все названия продуктов, которые вы хотите заменить.

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

UPDATE
    Table
SET Product = 'Fruit'
FROM
    Table t1 INNER JOIN #Table t2 on t1.Product = t2.Product
1 голос
/ 02 февраля 2009

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

SELECT 'Fruit' AS Product,
        Quantity
FROM Table

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

WHERE Product IN ('Banana', 'Orange', 'Apple')
0 голосов
/ 23 февраля 2010

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

CASE WHEN ShiptoPlant IN (';','/',' ') Then '' ELSE ShipToPlant END
0 голосов
/ 02 февраля 2009

Предложение о создании таблицы "категорий" будет вашим лучшим выбором в долгосрочной перспективе.

Для примера, посмотрите эту ссылку: Данные принадлежат вашим таблицам, а не вашему коду

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...