2013-12-06 2 views
1

У меня есть эта таблица Components:Обработка строк для каждой записи в SQL Server и C#

ItemNo ItemDescription    Type 
    1  Apple Fruit 20Kg    null 
    2  Carrot Veg 1Kg    null 
    3  Fig DryFruit 100g    null 

Требование в том, что для каждого ItemDescription, определить, если его Fruit или DryFruit, вставить значение fruit, чтобы столбец Type. Если его тип Veg, то я положил значение Vegetable в колонку Type.

Результирующая таблица выглядит следующим образом:

ItemNo ItemDescription    Type 
    1  Apple Fruit 20Kg    Fruit 
    2  Carrot Veg 1Kg    Vegetable 
    3  Fig DryFruit 100g    Fruit 

Как этого добиться?

С C# код:

var itemDescription = GetAllItemDescription() //Executes 'select ItemDescription from Components;' SQL query 
itemDescription.ForEach(item=>{ 
    if(item.Contains("Fruit") || item.Contains("DryFruit")) 
    { 
     EnterFruitInTypeColumn() //contains sql query which does the corresponding stuff. 
    } 
    ........ 
} 

Возникает вопрос:

Как я должен сделать то же самое вещество, используя только SQL заявления?

(я также знаю, что есть T-SQL string processing stuffs, но не может соответствовать любому с вышеуказанным требованием)

+0

@bryanmac: Хороший улов! Но я на 100% уверен, что этого не произойдет. Либо это может быть «Освежающий растительный напиток» или «Освежающий фрукт», но не оба. (Я отвечаю за вставку данных в таблицу, и именно поэтому я уверен). Но, это хороший улов. –

ответ

3

Как и другие ответы, это должно получить вас там:

UPDATE Components 
SET [Type] = CASE WHEN CHARINDEX('DryFruit', ItemDescription) > 0 THEN 'Fruit' 
        WHEN CHARINDEX('Veg', ItemDescription) > 0 THEN 'Vegetable' 
        WHEN CHARINDEX('Fruit', ItemDescription) > 0 THEN 'Fruit' 
        ELSE null 
      END 
1

Следующий запрос будет делать.

UPDATE Components 
SET [TYPE] = 'FRUIT' 
WHERE ItemDescription LIKE '%Fruit%' 

Вы должны переписать запрос для всех типов.

1

Пожалуйста, попробуйте:

update Components 
set [Type]=(case when charindex('Fruit', ItemDescription,0)>0 then 'Fruit' 
      else 'Vegetable' end) 
Смежные вопросы