2009-02-02 20 views
12

Estoy escribiendo una consulta SQL en SQL Server en la que necesito reemplazar varios valores de cadena con un solo valor de cadena. Por ejemploReemplazar varias cadenas en la consulta SQL

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

se convertiría en

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

La única manera que sé cómo hacer esto es utilizar un anidado SUSTITUIR en la cláusula SELECT.

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

¿Hay alguna manera más fácil?

EDITAR: Puede haber otros valores en la categoría de Producto. Ver el ejemplo editado arriba.

Respuesta

20

BradC tiene la mejor respuesta hasta ahora, pero en caso de que por alguna razón no se puede crear la tabla adicional que quería publicar una adaptación de la respuesta de Kibbee:

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

Esto funcionará mejor para mis propósitos ya que la base de datos de la que estoy extrayendo es un archivo. De lo contrario, agregar una columna de categoría sería el camino a seguir. ¡Gracias! –

+0

Está hablando de agregar una pequeña tabla de búsqueda, y eso es bastante fácil de hacer, incluso para un archivo db. –

1

Si no hay otros productos distintos de los mencionados que podría hacer:

SELECT 'Fruit' AS Product, 
     Quantity 
FROM Table 

Si hay otros productos jus añadir una cláusula 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

Esto es útil. Gracias. –

11

Hacer una nueva "categoría" tabla que tiene una lista de sus productos, junto con la "categoría" a la que pertenecen.

Luego haga una unión interna.

+0

lo primero que pensé. – dotjoe

+2

+1 esta es la manera de hacerlo – SQLMenace

+0

Esta sería una buena solución, excepto que estoy sacando de un archivo de solo lectura. –

1

Puede crear una tabla temporal con una sola columna columna 'Producto' e insertar todos los nombres de productos que desee reemplazar.

A continuación, realice una combinación interna en la tabla de destino para su actualización.

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

Las comillas simples para delimitar el texto en SQL:

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