2013-08-11 3 views
0

Я использую SQL Server 2008 Express и хотел бы сделать следующее.SQL Server 2008 объединяет несколько столбцов для формирования одного столбца

У меня есть две таблицы, Ингредиент и Единица измерения. In Ingredient У меня есть 5 столбцов: id, имя, количество, комментарий, uom_id. Е.

 ID NAME  QTY  COMMENT    UOM_ID 
    1 Garlic 2.00 Finely chopped  1

В UnitOfMeasure У меня есть 2 колонки: ID, имя. E.G.

 
    ID NAME 
    1 Teaspoons 

Я создать новый столбец в Ингредиент под названием «деталь», и я хотел бы, чтобы он населен с комбинацией всех остальных столбцов, включая имя из таблицы unitOfMeasure. E.G. новой таблицы ингредиентов.

 
    ID NAME QTY COMMENT   UOM_ID DETAIL 
    1 Garlic 2.00 Finely chopped 1   2 Teaspoons of Garlic (Finely chopped) 

У меня есть базовый SQL, который я сбил, что выглядит так.

 
    update INGREDIENT 
    set detail = cast(quantity as varchar) + ' ' + 
      name + coalesce(' (' + COMMENT + ')', '') 

Это вид работ, но имеет несколько проблем. Во-первых, qty выходит так. 2.00 Я хочу, чтобы иметь возможность отказаться от .00, но есть обстоятельства, когда это может быть 0,5, поэтому я не могу просто округлить сумму.

Вторая проблема в том, что поле комментариев пустым. Я получаю «()». Если поданные комментарии пустые, я не хочу отображать скобки.

Последняя проблема заключается в том, что я не уверен, как сделать соединение с таблицей UnitOfMeasure.

Если вы можете решить хотя бы одну из этих проблем, я был бы очень благодарен. Спасибо.

+0

Вы хотите запрос, который отображает в этом случае или сценарий на самом деле обновить таблицу или вы создаете вид или что? – Leeish

+0

Что вы хотите отобразить для 0.5? Я смущен, почему у значений количества будут десятичные знаки? –

+0

@ Leeish - предпочел бы SQL. – Bruce

ответ

2

Попробуйте

update i 
set i.detail = cast(cast(i.quantity as int) as varchar) + ' ' + 
      name + coalesce(' (' + nullif(ltrim(rtrim(COMMENT)),'') + ')', '') 
from ingredient i 
left outer join UnitOfMeasure m on i.UOM_ID = m.id 
+0

Большое спасибо. Это работает 99% правильно. Единственная проблема заключается в том, что количество определяется как int, которое округляет 0,5 количества до 1 вместо того, чтобы оставить их равными 0,5, но я, вероятно, могу это понять. – Bruce

+0

О, я сделал две незначительные модификации выше. i.NAME + (чтобы сделать уникальным) и + m.NAME, чтобы получить имя для таблицы uom. – Bruce

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