2015-07-02 3 views
0

У меня есть таблица с одной записью. Мне нужно обновить 8 полей в другой таблице на основе столбца TYPE одной записи. Я думал, что дело «Дело» - это путь, но я вытаскиваю своего зайца! Я искал и видел некоторые примеры, которые приближаются, но не совсем! любая помощь пожалуйста! вот мой код.Использование оператора Case для обновления другой таблицы

UPDATE [dbo].[PART_DIMENSION] 

SELECT [SELL_PACK], 
    CASE q.PACK_TYPE WHEN 'SELL' then 1, 
       [SELL_PACK_UOM] = Q.PACK_ASSMBY, 
       [SELL_PACK_QTY] = Q.QTY, 
       [SELL_PACK_LENGTH] = Q.LENGTH, 
       [SELL_PACK_WIDTH] = Q.WIDTH, 
       [SELL_PACK_HEIGHT] = Q.HEIGHT, 
       [SELL_PACK_WEIGHT] = Q.WEIGHT, 
       [SELL_PACK_INNER_QTY] = Q.INNER_QTY, 
       [SELL_PACK_CAN_NEST] = Q.CAN_NEST, 
       [SELL_PACK_NEED_RETAIL_PACK] = Q.NEED_RETAIL_PACK 
      FROM PART_DIMENSION as a 
      INNER JOIN Qubiscan as q 
      on a.part_id=q.part_id 

    WHEN q.PACK_TYPE='INNER' then 
      SET[INNER_PACK] = 1, 
       [INNER_PACK_UOM] = Q.PACK_ASSMBY, 
       [INNER_PACK_QTY] = Q.QTY, 
       [INNER_PACK_LENGTH] = Q.LENGTH, 
       [INNER_PACK_WIDTH] = Q.WIDTH, 
       [INNER_PACK_HEIGHT] = Q.HEIGHT, 
       [INNER_PACK_WEIGHT] = Q.WEIGHT 
      FROM PART_DIMENSION as a 
      INNER JOIN Qubiscan as q 
      on a.part_id=q.part_id 

    WHEN q.PACK_TYPE='MASTER' then 
      SET[MASTER_PACK] = 1, 
       [MASTER_PACK_UOM] = Q.PACK_ASSMBY, 
       [MASTER_PACK_QTY] = Q.QTY, 
       [MASTER_PACK_LENGTH] = Q.LENGTH, 
       [MASTER_PACK_WIDTH] = Q.WIDTH, 
       [MASTER_PACK_HEIGHT] = Q.HEIGHT, 
       [MASTER_PACK_WEIGHT] = Q.WEIGHT 
      FROM PART_DIMENSION as a 
      INNER JOIN Qubiscan as q 
      on a.part_id=q.part_id 

ответ

1

Как сделать все за один выстрел - хорошая цель, но иногда вы можете попытаться сделать слишком много сразу. CASE, возможно, не лучший выбор в этом случае, потому что для выполнения того, что вы хотите, действительно потребуется около 24 операторов CASE ... выполнимо, но я не уверен, насколько это было бы понятно. Я хотел бы предложить, чтобы разорвать этот вниз на несколько простых кусков first..consider это (надеюсь, с минимальными опечаток :)):

Update a 
    from part_dimension a 
    join qubiscan q 
    on a.part_id=q.part_id 
    set   a.[MASTER_PACK] = 1, 
       a.[MASTER_PACK_UOM] = Q.PACK_ASSMBY, 
       a.[MASTER_PACK_QTY] = Q.QTY, 
       a.[MASTER_PACK_LENGTH] = Q.LENGTH, 
       a.[MASTER_PACK_WIDTH] = Q.WIDTH, 
       a.[MASTER_PACK_HEIGHT] = Q.HEIGHT, 
       a.[MASTER_PACK_WEIGHT] = Q.WEIGHT 
where q.pack_type='MASTER' 

Повторите этот блок для двух других полей списков/pack_types.

+0

Великий Давид! Мне пришлось переместить ОТ и ПРИСОЕДИНЯТЬ после SET, но я хорошо работаю! И намного проще, чем я изначально предполагал. Благодаря непальскому новичку. Я не использовал его решение, но я уверен, что это сработало бы так же хорошо! – Wakgtech

+0

Добро пожаловать! Должен был осознать себя, я поставил SET в неправильном месте - вот что я получаю за то, что у меня что-то в голове, фактически не думая * все это через LOL. Рад помочь. –

0

Поскольку вы ищете вариант объединения в заявлении обновления SQL Server, вы можете разделить обновление в три различные заявления и сделать что-то вроде этого:

--SELL 
UPDATE p1 
SET p1.[SELL_PACK] = 1 
    ,p1.[SELL_PACK_UOM] = Q.PACK_ASSMBY 
    ,p1.[SELL_PACK_QTY] = Q.QTY 
    ,p1.[SELL_PACK_LENGTH] = Q.[LENGTH] 
    ,p1.[SELL_PACK_WIDTH] = Q.WIDTH 
    ,p1.[SELL_PACK_HEIGHT] = Q.HEIGHT 
    ,p1.[SELL_PACK_WEIGHT] = Q.[WEIGHT] 
    ,p1.[SELL_PACK_INNER_QTY] = Q.INNER_QTY 
    ,p1.[SELL_PACK_CAN_NEST] = Q.CAN_NEST 
    ,p1.[SELL_PACK_NEED_RETAIL_PACK] = Q.NEED_RETAIL_PACK 
FROM [dbo].[PART_DIMENSION] p1 
INNER JOIN Qubiscan AS q ON p1.part_id = q.part_id 
WHERE q.pack_type = 'SELL'; 

--INNER 
UPDATE p2 
SET p2.[INNER_PACK] = 1 
    ,p2.[INNER_PACK_UOM] = Q.PACK_ASSMBY 
    ,p2.[INNER_PACK_QTY] = Q.QTY 
    ,p2.[INNER_PACK_LENGTH] = Q.[LENGTH] 
    ,p2.[INNER_PACK_WIDTH] = Q.WIDTH 
    ,p2.[INNER_PACK_HEIGHT] = Q.HEIGHT 
    ,p2.[INNER_PACK_WEIGHT] = Q.[WEIGHT] 
FROM [dbo].[PART_DIMENSION] p2 
INNER JOIN Qubiscan AS q ON p2.part_id = q.part_id 
WHERE q.pack_type = 'INNER'; 

--MASTER 
UPDATE p3 
SET p3.[MASTER_PACK] = 1 
    ,p3.[MASTER_PACK_UOM] = Q.PACK_ASSMBY 
    ,p3.[MASTER_PACK_QTY] = Q.QTY 
    ,p3.[MASTER_PACK_LENGTH] = Q.[LENGTH] 
    ,p3.[MASTER_PACK_WIDTH] = Q.WIDTH 
    ,p3.[MASTER_PACK_HEIGHT] = Q.HEIGHT 
    ,p3.[MASTER_PACK_WEIGHT] = Q.[WEIGHT] 
FROM [dbo].[PART_DIMENSION] p3 
INNER JOIN Qubiscan AS q ON p3.part_id = q.part_id 
WHERE q.pack_type = 'MASTER'; 

Надеется, что это помогает!

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