0

SQL に関する質問に苦しんでいます。Enterprise Manager を使用して SQL Server 2000 と通信しています。

バックグラウンド:

営業担当者番号 (slspsn_no) と地域と販売情報を格納するテーブル (テーブル A) があります...営業担当者番号と地域のレコードが複数あるため、営業担当者番号と地域をグループ化するビュー (ビュー A) を作成しました.

ここで、別のテーブル (テーブル B) を作成しました。このテーブルには、そのビューに基づいた 2 つの同様の列と、さらに多くの列が含まれています。

列: slspsn_no、地域、January_sales_goals、February_sales_goals、March_sales_goals など。

これらの毎月の販売目標は、アクセスを通じて人によって管理されます。唯一の問題は、これが今のところうまく機能することですが、テーブル A は slspsn_no とリージョンが頻繁に更新されるテーブルであるため、私の見解です。

質問:

ビュー A に基づいてテーブル B の 2 つの列を更新する SQL コマンドを教えてもらえますか? 課題は、すでに入力されている毎月の販売目標に null を配置せずにこれを行うことです.その営業担当者/地域の組み合わせがビュー A に存在しなくなった場合はテーブル B の行を削除するか、新しい営業担当者/ビュー A に地域が作成されており、後でアクセスして変更できる毎月の販売目標ごとに NULL または 0 が設定されています。

構文を作成する際にビューを必要とせずにテーブル 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 に答える