IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

[SQL2K][TSQL] Gestion des agrégats et du surnommage


Sujet :

MS SQL Server

  1. #1
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut [SQL2K][TSQL] Gestion des agrégats et du surnommage
    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
    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
    Evidemment le sum(select sum(...)) ne passe pas.

    J'ai essayé de modifier la requête ainsi
    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
    Ca ne fonctionne toujours pas et j'ai le droit à un joli "Erreur interne SQL Server".

    2. Le surnommage

    De nombreuses requêtes l'utilise, avec la forme suivante par exemple
    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)
    Ce qui ne passe pas non plus avec Sql Server.

    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.
    Pas de questions techniques par MP

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 224
    Points : 19 566
    Points
    19 566
    Billets dans le blog
    25
    Par défaut


    Il n'y a jamais eu de Sybase ASE 6 !

    Vous parlez d'une base SQL Anywhere ???
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par fadace
    Vous parlez d'une base SQL Anywhere ???
    Oui effectivement, désolé pour l'erreur de terme ^^

    Pour le problème des agrégats, j'ai résolu ce souci en passant par une vue. Donc pour ca, c'est réglé.

    Il me reste les histoires avec le surnommage. Pour certaines requêtes en passant également par une vue ca fonctionnera correctement. Pour les autres, à part réutiliser la sous-requête et alourdir la lecture de la requête (déjà compliquée), je ne vois pas comment faire.
    Pas de questions techniques par MP

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    A priori je m'en sortirais avec des vues pour le reste aussi donc de ce côté ci, le problème n'est plus. Juste une dernière question avant de clore cette discussion.

    J'ai un message d'erreur Violation de l'attribut de type de données restreint et je ne trouve rien de précis à ce sujet. Qu'est-ce que cela signifie exactement ?
    Pas de questions techniques par MP

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/09/2012, 18h02
  2. Réponses: 2
    Dernier message: 04/09/2012, 18h02
  3. Gestion des variables - mémoire ?
    Par RIVOLLET dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2002, 12h44
  4. Réponses: 4
    Dernier message: 04/07/2002, 12h31
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo