2016-06-02 6 views
-1

Zum Beispiel lassen Sie uns sagen, es gibt eine Tabelle wie folgt aus:Gibt es eine Möglichkeit, eine Zeile auszubrechen, wenn sie einen bestimmten Wert erreicht?

ID  Food 
--  ---- 
1   Fruit 

Also, wenn es sagt, Obst, ich will es in 3 Reihen zu durchbrechen:

ID  Food 
--  ---- 
1  Apple 
1  Banana 
1  Orange 

Irgendwelche Tipps?

+1

Schauen Sie sich Ihre Post und fragen Sie sich, wenn Sie denken, würden Sie in der Lage sein, dies zu beantworten basiert was Sie auf dem Laufenden. Sie müssen einige tatsächliche Details angeben, was Sie wollen. Ist das in einer Abfrage? Oder versuchst du, irgendeine Reihe Früchte zu nehmen und sie in 3 Reihen in der Tabelle zu verwandeln? Woher kommen die neuen Werte? Gib uns etwas und wir können helfen. –

+0

erstellen Sie eine Tabelle, die angibt, was eine Frucht ist, und treten Sie dieser Tabelle auf die gleichen IDs – SomeJavaGuy

+1

Ich würde eine [one-to-many-Beziehung] erstellen (https://en.wikipedia.org/wiki/One-to- many_ (data_model)) in Ihrer Datenbank. Erstellen Sie eine zweite Tabelle, die aussieht wie '(ID, FoodId, FoodPartName)' –

Antwort

3

Hmmm. . . Sie tun können:

select t.id, coalesce(a.alt, t.food) as food 
from t outer apply 
    (select alt 
     from (values ('Apple'), ('Banana'), ('Orange')) v(alt) 
     where t.food = 'Fruit' 
    ) a; 
+0

Danke Gordon, das hat perfekt für mich funktioniert! Kann ich fragen, was der v (alt) Teil bedeutet? Setzt dieser Teil die Werte in alt? – Marco

+0

@Marco. . Das 'v' ist ein Tabellenalias (genau wie' a'). Das "alt" stellt einen Spaltennamen in einer analogen Weise bereit. –

0
select ID, Food FROM YourTable WHERE food <> 'Fruit' 
UNION 
select ID, f2 FROM YourTable JOIN 
    (SELECT'Apple' f2 
     union 
     SELECT 'Banana' f2 
     UNION 
     SELECT 'ORANGE' f2 
    ) DT 
     ON food = 'Fruit'