2011-03-18 3 views
0

Je me bats avec une question SQL .. Nous utilisons le directeur d'entreprise pour communiquer avec SQL Server 2000.Mise à jour deux colonnes de table SQL basé sur la vue (SQL Server 2000)

Contexte:

I avoir une table (Table A) qui contient le numéro de vendeur (slspsn_no) et les informations régionales et commerciales ... puisqu'il y a plus d'un enregistrement pour le numéro de vendeur et la région, j'ai créé une vue (Vue A) qui regroupe le numéro et la région.

Maintenant, j'ai créé une table séparée (Table B) qui contient deux colonnes similaires basées sur cette vue en plus de beaucoup d'autres.

Colonnes: slspsn_no, région, January_sales_goals, February_sales_goals, March_sales_goals, etc.

Ces objectifs de vente mensuels seront gérées par une personne par l'accès. Le seul problème est que cela fonctionne très bien pour le moment, mais la table A est celle qui a slspsn_no et région mis à jour fréquemment et donc ma vue.

Question:

quelqu'un peut me aider avec une commande SQL qui mettra à jour ces deux colonnes du tableau B sur la base de Vue A? Le défi consiste à le faire sans placer de zéros dans les objectifs de ventes mensuels déjà saisis. Il supprimerait simplement toutes les lignes dans la table B si ce combo vendeur/région n'est plus dans la vue A, ou ajoute une ligne supplémentaire si un nouveau vendeur/La région a été créée dans la vue A avec des zéros ou des zéros pour chacun des objectifs de vente mensuels qui peuvent être modifiés par un accès ultérieur.

Si quelqu'un a une idée qui regrouperait slspsn_no et région de la table A sans avoir besoin d'une vue lors de la création de la syntaxe, je serais ravi de l'essayer.

Merci beaucoup !, -D

+0

Avez-vous pensé à utiliser une vue indexée dans SQL 2000? http://www.sqlteam.com/article/indexed-views-in-sql-server-2000 – Jeff

+0

Si l'une des réponses était correcte, veuillez l'accepter. – Ben

Répondre

0

Jetez un oeil à cet exemple.

Vous devriez être capable de le modifier pour répondre à vos besoins spécifiques.

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 
+0

Je vais devoir essayer à nouveau lundi ... Je continue à obtenir la syntaxe incorrecte près du message d'erreur FROM. Merci pour votre aide jusqu'à présent – Diego

+0

Je suis en mesure d'exécuter le code ci-dessus sans erreur ... – jim31415

0

Qu'est-ce que vous avez besoin est pas une table séparée, mais une vue matérialisée .

Dans SqlServer vous créez une vue matérialisée en plaçant un index sur une vue, qui contient les colonnes que vous souhaitez "matérialiser".

SqlServer le maintient à jour automatiquement.

Questions connexes