Bonjour,
Je cherche a faire une table de prix en sql server 2005 pour l'attaquer ensuite avec Business object
Actuellement j'ai une table qui contient les champs suivant
avec ce genre de donnée dedans
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TABLE MaTable (du datetime, au datetime, client int, pn varchar, prix real, priorite int)
Le principe c'est que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 INSERT INTO MaTable VALUES ('01/01/2011','31/12/2011', 1, 'a', 90, 1) INSERT INTO MaTable VALUES ('01/01/2011','31/12/2011', 1, 'b', 160, 1) INSERT INTO MaTable VALUES ('01/01/2011','31/12/2011', 1, 'a', 100, 3) INSERT INTO MaTable VALUES ('01/01/2011','31/12/2011', 1, 'b', 200, 3) INSERT INTO MaTable VALUES ('01/01/2011','31/12/2011', 2, 'a', 0.9, 2) INSERT INTO MaTable VALUES ('01/01/2011','31/12/2011', 2, 'b', 0.8, 2) INSERT INTO MaTable VALUES ('01/01/2011','31/12/2011', 2, 'a', 100, 3) INSERT INTO MaTable VALUES ('01/01/2011','31/12/2011', 2, 'b', 200, 3) INSERT INTO MaTable VALUES ('31/12/2010','30/11/2011', 3, 'a', 0.9, 2) INSERT INTO MaTable VALUES ('31/12/2010','30/11/2011', 3, 'b', 0.8, 2) INSERT INTO MaTable VALUES ('01/01/2011','31/12/2011', 3, 'a', 100, 3) INSERT INTO MaTable VALUES ('01/01/2011','31/12/2011', 3, 'b', 200, 3)
du au => la remise cours de telle date a telle date
client => ID du client
pn => ID de l'article
prix => soit un prix net (200 si le client paye 200 euro par exemple) soit un pourcentage a multiplier par le tarif (0.8 si le client a 20% de remise par exemple)
priorite => 1 si c'est un prix net, 2 si c'est une remise, 3 si c'est le tarif
Je voudrais faire une view sur cette table de facon a, au lieu d'avoir dans la colonne prix le prix ou la remise, avoir toujours le prix
Exemple : pour le client 3, pour l'article 1 et le 30/09/2011, je voudrais avoir dans la colonne prix avoir 90 (qui correspond a 100, prix tarif pour ce client, cet article et cette date, * 0.9 qui est la remise pour ce client, cet article et cette date) au lieu d'avoir 0.9
Mon probleme : les remises et les tarifs n'ont pas forcement les memes dates de validité et je n'arrive pas a écrire une sous requete comme je veux
si je fais ce code
Ca marche pour le client 1 : il suffit de garder le prix net
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 SELECT t1.du, t1.au, t1.client, t1.pn, t1.prix as [Prix ou remise], t1.priorite, (select prix from matable t2 where t2.priorite=3 and t2.pn = t1.pn and t2.client = t1.client and t2.du =t1.du and t2.au=t2.au) as [prix tarif] , case when priorite in (2) then round(t1.prix * (select prix from matable t2 where t2.priorite=3 and t2.pn = t1.pn and t2.client = t1.client and t2.du =t1.du and t2.au=t2.au),2) else t1.prix end as [Prix net final] FROM matable t1
Ca marche pour le client 2 : parce que coup de bol, la date de validité du tarif est la meme que celle de la remise
Ca ne marche pas pour le client 3 : la remise et le tarif n'ont pas exactement les meme période et du coup ca foire
si a la place je fais ca, ca fonctionne mais j'impose la date dans SQL alors que je veux pouvoir la choisir en Business object
Dans business object, la vue sera toujours utilisée avec un client, une date et une liste d'articles donc il n'y aura pas de probleme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 SELECT t1.du, t1.au, t1.client, t1.pn, t1.prix as [Prix ou remise], t1.priorite, (select prix from matable t2 where t2.priorite=3 and t2.pn = t1.pn and t2.client = t1.client and t2.du <= getdate() and t2.au >= getdate()) as [prix tarif] , case when priorite in (2) then round(t1.prix * (select prix from matable t2 where t2.priorite=3 and t2.pn = t1.pn and t2.client = t1.client and t2.du <= getdate() and t2.au >= getdate()),2) else t1.prix end as [Prix net final] FROM matable t1 where t1.au <= getdate() and t2.du >= getdate()
Il n'y a qu'une remise et qu'un tarif a une date donnée, donc je peux toujours faire la multiplication mais je ne sais pas comment faire la view dans SQL
Je peux y faire quelque chose ? ou je dois forcement finir le boulor dans BO?
J'espere etre sur le bon forum (j'espere avoir bien identifié le fait que le probleme est générique et pas lié a SQL server 2005)
Merci d'avance,
Emmanuelle
Partager