powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборочное обновление данных обной таблицы на основании параметров другой таблицы
17 сообщений из 17, страница 1 из 1
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829183
Laikon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток!
Помогите, плиз, разобраться в проблеме с одним запросом. Есть две таблицы:
Партиясерийный номеркод товарапартиякол-во товара в блокекол-во товара доступного
Партия-и-упаковкасерийный номерпартияномер упаковкикол-во товарастатус упаковки
И есть запрос формата:
Код: sql
1.
update [таблица "партия"] set [кол-во товара в блоке] = (sum([кол-во_товара]) from [таблица "партия-и-упаковка"] where [статус упаковки]="блок")


Проблема в том что я не могу понять как поставить условие, чтобы суммировалось количество товара для каждой партии отдельно, так как во 2 таблице есть множество записей с одной и той же партией, но номер упаковки отличается и у каждой упаковки свой статус.
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829195
Laikon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для примера накидал данные для таблиц:
Партия серийный номер код товара партия кол-во товара в блоке кол-во товара доступного1 67983 партия 1 0 02 67983 партия 2 0 03 67983 партия 3 0 0

Партия-и-упаковка серийный номер партия номер упаковки кол-во товара статус упаковки1 партия 1 43 27 блок2 партия 2 67 58 норм3 партия 2 87 58 блок4 партия 2 34 65 блок5 партия 3 23 45 норм6 партия 3 81 31 блок7 партия 2 15 76 норм8 партия 3 70 76 блок

Т.е. запрос должен в таблице "Партия" для партии 1 обновить значение "кол-во товара в блоке" = 27, для партии 2 = 123, для партии 3 = 107
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829269
BredSpit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Соединиться по партиям и условию 'блокировано' и посчитать суммы
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829326
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
google: update join
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829406
Laikon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BredSpit, это и так понятно, а поконкретнее? Как написать подзапрос для таблицы "партия-и-упаковка", чтобы он не греб все стрки подряд? Потому что если поставить условие после него и в основном апдейте ставить
Код: sql
1.
where [партия.партия]=[партия-и-упаковка.партия] and [партия-и-упаковка.статус]='блок'


т он сначала просуммирует все количество, а потом только будет обновлять таблицу [партия]. А мне нужно чтобы он суммировал каждую партию отдельно
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829407
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё зависит от того, в разрезе чего у тебя коды уникальны.
Скорее всего надо добавить условия

партия.серийный номер = Партия-и-упаковка.серийный номер
и
партия.партия = Партия-и-упаковка.партия

Хотя странно, почему в "Партия-и-упаковка" нет "код товара"
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829412
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть разница между.
"Проставить для всех партий сумму кол-ва из таблицы "партия-и упаковка" с со статусом упаковки =блок"
и
"Проставить для всех партий сумму кол-ва СООТВЕТСТВУЮЩИХ товаров из таблицы "партия-и упаковка" с со статусом упаковки =блок"
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829414
Laikon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183, Код товара в таблице есть, но у одного товара множество партий, а вот партия всегда уникальна (даже у разных товаров не может быть одинаковых партий) поэтому привязку надо сделать через партию
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829415
Laikon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PizzaPizza, насчет использования join вместо подзапроса была идея, но у меня не получается корректно составить эту конструкцию(((( В join я пока не очень силен. Привык работать подзапросами
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829424
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Laikon982183, Код товара в таблице есть, но у одного товара множество партий, а вот партия всегда уникальна (даже у разных товаров не может быть одинаковых партий)
Есть партия товаров (Когда один код партии может принадлежать нескольким товарам)
Есть партия товара (Когда партия товара уникальна в разрезе номенклатуры)
Есть уникальная партия. (Когда именно код партии идентифицирует товар)

Laikon поэтому привязку надо сделать через партию
Значит тебе надо добавить условие партия.партия = Партия-и-упаковка.партия
потом научишься через join
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829493
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Laikon,

без join в sqlе практически делать нечего - это один из смыслов реляционных баз

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
create table #t  
(
  pa int, 
  qua int
);

insert into #t (pa,qua) values (1,0), (2,0), (3,0);

with 
pack as (
select * from 
(VALUES(1,27,1),(2,58,0),(2,58,1),(2,65,1),(3,45,0),(3,31,1),(2,76,0),(3,76,1)) AS b(pa,qua,st) 
)

-- обновить таблицу установив значение...
UPDATE #t SET qua = s
-- на основе другой... таблицы
FROM (SELECT p.pa, sum(pack.qua) as s  FROM #t as p
join pack ON p.pa = pack.pa AND st = 1
GROUP BY p.pa) as a
-- при условии 
WHERE #t.pa = a.pa

SELECT * from #t
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829532
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё правильно, но человек в данном случае структуру update не понимает.
Не видит, что для обновления надо должным образом сформировать/подготовить данные для обновления.
Что надо и сгруппировать и суммировать и сравнить.
А вложенный запрос он не поймет.

http://sqlfiddle.com/#!18/9ed02/3

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE TABLE Part ([pa] int,  [qua] int);
insert into Part (pa,qua) values (1,0), (2,0), (3,0);

CREATE TABLE PartU ([pa] int,[qua] int, [st] int); 
insert into PartU (pa,qua,st) values 
(1,27,1),(2,58,0),(2,58,1),(2,65,1),(3,45,0),(3,31,1),(2,76,0),(3,76,1);

SELECT PartU.pa, sum(PartU.qua) as s  
into bufer
FROM PartU 
WHERE PartU.st = 1
GROUP BY PartU.pa;

UPDATE Part set Part.qua = bufer.s 
FROM Part
INNER JOIN bufer
ON (Part.pa = bufer.pa); 

select * from Part
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829686
Laikon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183, PizzaPizza, т.е. я правильно понимаю, что просто с наскока обновить данные нереально и необходимо создать виртуальную таблицу, где произвести все расчеты и потом обновиться из этой виртуально таблицы? Бин, печально....Я данные в таблицах просто для примера вам привел, а по факту в каждой таблице записей больше тысячи и перечислять все в новую таблицу капец как не хочется.......Что касается вложенного запроса - я вот как раз пытался сделать что-то подобное при приравнивании, но вот не смог догадаться как связать условие по партии из мелкого запроса с основным...Ладно, но мыслю для переваривания вы мне подкинули! Большое спасибо!!
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829687
Laikon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183, PizzaPizza, мне еще подкидывали идею касательно пошагового апдейта, т.е. с использованием курсора. Как ваше мнение - есть ли смысл копать в эту сторону?
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829689
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza дал вам конечное, полностью работоспособное решение.
Я попытался пошагово объяснить логику и синтаксис.
Посмотрите учебные примеры по UPDATE там всё разжевано.
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829692
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Laikon необходимо создать виртуальную таблицу, где произвести все расчеты и потом обновиться из этой виртуально таблицы?
У тебя же в условии сказано " основании параметров другой таблицы" скорее всего "основании ДАННЫХ другой таблицы"
в таблице у тебя нужных данных НЕТ. Их надо предварительно сформировать (агрегировать)

Laikon а по факту в каждой таблице записей больше тысячи и перечислять все в новую таблицу капец как не хочется.......
Сколько лишних миллисекунд будет выполняться запрос?
...
Рейтинг: 0 / 0
Выборочное обновление данных обной таблицы на основании параметров другой таблицы
    #39829711
Laikon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183, понял, спасибо! буду разбираться
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборочное обновление данных обной таблицы на основании параметров другой таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]