2016-06-02 3 views
-1

Например, допустим, что есть таблица вроде этого:Есть ли способ разбить строку, если она соответствует определенному значению?

ID  Food 
--  ---- 
1   Fruit 

Поэтому, когда он говорит, что фрукты, я хочу, чтобы разбить его на 3 строки:

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

Любые советы?

+1

Посмотрите на свой пост и спросить себя, если вы думаете, что вы могли бы ответить на этот вопрос на основе того, что вы в курсе. Вам нужно предоставить некоторые фактические данные о том, что вы хотите. Это в запросе? Или вы пытаетесь взять любой ряд, который является плодом, и превратить его в 3 строки в таблице? Откуда берутся новые ценности? Дайте нам что-нибудь, и мы сможем помочь. –

+0

создайте таблицу, указывающую, что такое плод, и присоединитесь к этой таблице на том же id'е – SomeJavaGuy

+1

Я бы создал отношения [один ко многим] (https://en.wikipedia.org/wiki/One-to- many_ (data_model)) в вашей базе данных. Создайте вторую таблицу, которая выглядит как '(ID, FoodId, FoodPartName)' –

ответ

3

Хммм. , , Вы можете сделать:

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

Спасибо, Гордон, это отлично сработало для меня! Могу ли я спросить, что означает v (alt)? Включает ли эта часть значения в alt? – Marco

+0

@Marco. , 'V' - псевдоним таблицы (как' a'). Соответственно, 'alt' предоставляет имя столбца. –

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' 
Смежные вопросы

 Смежные вопросы