Заполните строки на основе другой строки (Копировать цены из ветви 0 во все остальные ветви) - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь заполнить строки на основе другой строки,

Например

  • Обновление таблицы цен на товары, где branchID = 0

  • ко всем другим продуктам, где значение branchid <> 0 основано на каждом коде продукта

В таблице

7 строк одного и того же продукта, каждая строка должна быть идентичной, но единственным отличием является branchid

Я хочу, чтобы все данные из строки ветви 0 заполняли остаток для продукта

мой текущий скрипт обновления действительно работает, но он занимает так много места в журнале транзакций, что он завершается ошибкой, и для его запуска требуется 2 часа

UPDATE  ProductPrice
    SET StandardSell = pp2.StandardSell,
        StandardBuy = pp2.StandardBuy,
        InternalCost = pp2.InternalCost,
        BuyPerID =  pp2.BuyPerID,
        AverageCostPerID = pp2.AverageCostPerID,
        InternalCostPerID = pp2.InternalCostPerID,
       SellPerID = pp2.SellPerID
FROM (SELECT BranchID, ProductID, StandardSell, StandardBuy,SellPerID, InternalCost,BuyPerID,AverageCostPerID,InternalCostPerID      
      FROM ProductPrice 
      WHERE BranchID = 0
     ) AS pp2 INNER JOIN
     ProductPrice AS pp1
     on pp1.ProductID = pp2.ProductID       
WHERE pp1.ProductID = pp2.ProductID 

Я хочу, чтобы товары обновлялись по ценам от филиала 0 до всех остальных филиалов на продукт.

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Спасибо за ваши предложения,

В конце я просто дал журналу больше места.Тогда дайте ему поработать, хотя это займет 2 часа. Lol.

Но это сделано

Спасибо за скрипт, который я разместил, работает для всех остальных пользователей.

0 голосов
/ 09 мая 2019

Это слишком долго для комментария.

Первое замечание заключается в том, что вы должны исправить свою модель данных.Повторение тех же столбцов на семи записях свидетельствует о том, что ваши данные не нормализованы.Семь столбцов, которые вы хотите обновить, вероятно, должны быть в таблице ProductPrice.

Тогда вам нужна таблица ProductBranch с дополнительными столбцами и идентификатором ветви.

При этомесли вы застряли с моделью данных, вы застряли с обновлением, которое в основном обновляет все строки.Вместо этого создайте новую таблицу со всеми необходимыми столбцами:

insert into temp_productprice
    select . . .
    from . . .;

Затем обрежьте productprice и вставьте в нее новые данные.Массовая вставка более эффективна, чем гигантское обновление.

Наконец, вы также можете попробовать использовать оконные функции:

with toupdate as (
      select pp.*,
             max(case when branchid = 0 then StandardSell end) as StandardSell_0,
             max(case when branchid = 0 then StandardBuy end) as StandardBuy_0,
      from productprice pp
             . . .
     )
update toupdate
    set StandardSell = StandardSell_0,
        StandardBuy = StandardBuy_0,
        . . .
    from branchid <> 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...