0

我正在为一个 SQL 问题苦苦挣扎。我们使用企业管理器与 SQL Server 2000 进行通信。

背景:

我有一个表(表 A),其中包含销售人员编号(slspsn_no)以及区域和销售信息...由于销售人员编号和区域的记录不止一条,我创建了一个视图(视图 A),将销售人员编号和区域分组.

现在,我创建了一个单独的表(表 B),其中包含两个基于该视图的相似列以及更多列。

列:slspsn_no、region、January_sales_goals、February_sales_goals、March_sales_goals 等。

这些月度销售目标将由一个人通过访问来管理。唯一的问题是这目前很好用,但表 A 是 slspsn_no 和 region 经常更新的表,因此是我的观点。

问题:

有人可以帮助我使用 SQL 命令来根据视图 A 更新表 B 中的这两列吗?挑战是要做到这一点,而不在已经输入的每月销售目标中放置空值。如果该销售人员/区域组合不再在视图 A 中,它只会删除表 B 中的任何行,或者如果新的销售人员 / 则添加额外的行区域已在视图 A 中创建,每个月销售目标都为空或零,以后可以通过访问进行更改。

如果有人有一个想法,可以在创建语法时将表 A 中的 slspsn_no 和区域分组而无需视图,我很乐意尝试这样做。

非常感谢!,-D

4

2 回答 2

0

看看这个例子。

您应该能够对其进行修改以满足您的特定需求。

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
于 2011-03-18T19:54:38.577 回答
0

您需要的不是单独的表,而是物化视图

在 SqlServer 中,您通过在视图上放置索引来创建物化视图,其中包含您希望“物化”的列。

SqlServer 会自动保持最新状态。

于 2011-03-19T13:42:18.390 回答