Bonjour,
je reprends actuellement le travail d'un collègue. Il s'agit de migrer une application de Sybase 6 vers Sql Server 2000. Je rencontre deux gros problèmes suite aux différences entre les possibilités du langage SQL de chacun de ses SGBD.
1. les agrégats
Une des requêtes utilise un appel imbriqué de la fonction sum. Voici la requête sous Sybase 6
Evidemment le sum(select sum(...)) ne passe pas.
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 select AGC.codeimput as Compte, sum((Select sum(CDL.MtTotalHT) from ContratDecompLigne as CDL inner join contratdecomp as CD on CD.IdContratdecomp = CDL.Idcontratdecomp and year(CD.DateFact)=2005 and Month(CD.DateFact) = 1 Where CDL.IdArticle = AGC.Idarticle and ((AGC.Annee <> 0 and YEAR(CDL.DateDEBUT ) = AGC.Annee) or AGC.Annee = 0) and CD.Etat & 64 <> 0 )) as 'Janvier', Sum((Select sum(CDL.MtTotalHT) from ContratDecompLigne as CDL inner join contratdecomp as CD on CD.IdContratdecomp = CDL.Idcontratdecomp and year(CD.DateFact)=2005 and Month(CD.DateFact) = 2 Where CDL.IdArticle = AGC.Idarticle and ((AGC.Annee <> 0 and YEAR(CDL.DateDEBUT ) = AGC.Annee) or AGC.Annee = 0) and CD.Etat & 64 <> 0 )) as 'Février', ... sum((Select sum(CDL.MtTotalHT) from ContratDecompLigne as CDL inner join contratdecomp as CD on CD.IdContratdecomp = CDL.Idcontratdecomp and year(CD.DateFact)=2005 Where CDL.IdArticle = AGC.Idarticle and ((AGC.Annee <> 0 and YEAR(CDL.DateDEBUT ) = AGC.Annee) or AGC.Annee = 0) and CD.Etat & 64 <> 0 )) as 'Totaux' from ArticleGestCom as AGC Group By AGC.codeimput Having "Totaux" <> 0
J'ai essayé de modifier la requête ainsi
Ca ne fonctionne toujours pas et j'ai le droit à un joli "Erreur interne SQL Server".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 select AGC.codeimput Compte, (select sum(MtTotalHT) from (Select sum(CDL.MtTotalHT) MtTotalHT from ContratDecompLigne CDL inner join contratdecomp CD on CD.IdContratdecomp = CDL.Idcontratdecomp and year(CD.DateFact)=2005 and Month(CD.DateFact) = 1 Where CDL.IdArticle = AGC.Idarticle and ((AGC.Annee <> 0 and YEAR(CDL.DateDEBUT) = AGC.Annee) or AGC.Annee = 0) and CD.Etat & 64 <> 0) T) 'Janvier', ... from ArticleGestCom AGC group By AGC.codeimput
2. Le surnommage
De nombreuses requêtes l'utilise, avec la forme suivante par exemple
Ce qui ne passe pas non plus avec Sql Server.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select chp1, chp2, (select expr1) A, (select expr2) B, (isnull(A,0)-isnull(B,0)) C, ... where condition(A) or condition(B)
Je suis actuellement bloqué sur ces 2 points. Les requêtes que je dois convertir sont assez tordues malheureusement et j'avoue que je m'y perds un peu beaucoup
Je fais donc appel à vous, surdoués du T-SQL sous Sql Server, pour m'aider à franchir ce cap, qui me semble bien difficile. Merci.
Partager