2009-02-02 7 views
12

J'écris une requête SQL dans SQL Server dans laquelle j'ai besoin de remplacer plusieurs valeurs de chaîne par une seule valeur de chaîne. Par exempleRemplacer plusieurs chaînes dans une requête SQL

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

deviendraient

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

La seule façon que je sais comment faire est d'utiliser un imbriquée REPLACE dans la clause SELECT.

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

Y at-il un moyen plus facile? EDIT: Il peut y avoir d'autres valeurs dans la catégorie Product. Voir l'exemple édité ci-dessus.

Répondre

20

BradC a la meilleure réponse à ce jour, mais au cas où vous êtes pour une raison quelconque incapable de créer la table supplémentaire que je voulais poster une adaptation de la réponse de Kibbee:

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

Cela fonctionnera le mieux pour mes fins puisque la base de données que je tire de est une archive. Sinon, ajouter une colonne de catégorie serait le chemin à parcourir. Merci! –

+0

Il parle d'ajouter une petite table de recherche, et c'est assez facile à faire, même pour une archive db. –

1

S'il n'y a pas d'autres produits que ceux mentionnés ci que vous pourriez faire:

SELECT 'Fruit' AS Product, 
     Quantity 
FROM Table 

S'il y a d'autres produits jus ajouter une clause 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

Ceci est utile. Merci. –

11

Faire une nouvelle "catégorie" table qui a une liste de vos produits, avec la "catégorie" à laquelle ils appartiennent.

Ensuite, faites juste une jointure interne.

+0

première chose que je pensais. – dotjoe

+2

+1 c'est la façon de le faire – SQLMenace

+0

Ce serait une bonne solution, sauf que je tire d'une archive en lecture seule. –

1

Vous pouvez créer une table temporaire avec une seule colonne de colonne « produit », et insérez tous les noms de produits que vous souhaitez remplacer. Puis, effectuez une jointure interne par rapport à la table cible pour votre mise à jour.

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

guillemets simples pour délimiter le texte dans SQL:

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