Обновление двух столбцов таблицы SQL на основе представления (SQL Server 2000) - PullRequest
0 голосов
/ 18 марта 2011

Я борюсь с вопросом SQL. Мы используем диспетчер предприятия для связи с SQL Server 2000.

Справочная информация:

У меня есть таблица (таблицаA) в котором хранится номер продавца (slspsn_no), а также регион и информация о продажах ... поскольку существует более одной записи для номера продавца и региона, я создал представление (представление A), которое группирует номер продавца и регион.

Теперь я создал отдельную таблицу (Таблица B), которая содержит два похожих столбца, основанных на этом представлении, в дополнение к многим другим.

Столбцы: slspsn_no, region, January_sales_goals, February_sales_goals, March_sales_goals и т. Д.

Эти ежемесячные цели продаж будут управляться человеком через доступ.Единственная проблема в том, что сейчас это прекрасно работает, но таблица A имеет таблицу, в которой slspsn_no и регион часто обновляются, и, следовательно, мое мнение.

Вопрос:

Может кто-нибудьпомогите мне с командой SQL, которая обновит эти два столбца в таблице B на основе представления A?Задача состоит в том, чтобы сделать это без помещения нулей в уже введенные месячные цели продаж. Он просто удалил бы все строки в таблице B, если этого комбо продавца / региона больше нет в представлении A, или добавил дополнительную строку, если новый продавец /регион был создан в представлении А с нулями или нулями для каждой из ежемесячных целей продаж, которые могут быть изменены с помощью доступа позже.

Если у кого-то есть идея, которая бы группировала slspsn_no и регион из таблицы А без необходимостипредставление при создании синтаксиса, я был бы счастлив попробовать это.

Большое спасибо !, -D

Ответы [ 2 ]

0 голосов
/ 19 марта 2011

Вам нужна не отдельная таблица, а материализованное представление .

В SqlServer вы создаете материализованное представление, помещая индекс в представление, содержащее столбцы, которые вы хотите «материализовать».

SqlServer автоматически обновляет его.

0 голосов
/ 18 марта 2011

Посмотрите на этот пример.

Вы должны иметь возможность изменить его в соответствии с вашими конкретными потребностями.

set nocount on;

declare @A table(id int, region int, name varchar(90));
insert @A values(1,200,'bob');
insert @A values(2,300,'lee'); -- doesn't exist in @B, should be added
insert @A values(5,300,'mia');
insert @A values(19,300,'tex');
insert @A values(401,400,'gaga'); -- doesn't exist in @B, should be added

declare @B table(id int, region int, goal1 int, goal2 int);
insert @B Values(1,200,8,9);
insert @B Values(5,300,7,7);
insert @B Values(19,300,5,9);
insert @B Values(555,100,1,1);  -- doesn't exist in @A, should be deleted

select * from @B order by id, region

-- insert new @A records into @B
insert @B (id, region)
select id, region from @A where id not in (select id from @B)

-- delete records from @B where not found in @A
delete @B
where id not in (select id from @A)

select * from @B order by id, region
...