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

Langage SQL Discussion :

Soustraction de 2 champs


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut Soustraction de 2 champs
    Bonjour,

    J’ai une table dans laquelle se trouvent ces données :

    ID----Num-------Diff
    1-----213243
    2-----876746
    3-----553451
    4-----876367
    5-----454546

    Je voudrais que Diff soit égal à (Num.ID) – (Num.ID – 1). Je sèche et je ne vois pas comment faire pour cette soustraction quand ID = 1. Pouvez – vous m’aider ? Je suis sous Access 2000.

    Merci par avance

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T1.Id, T1.Num
    FROM nom_table T1
    Pour obtenir la différence, il faut d'abord associer à chaque Id l'Id qui précéde.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.Id, T1.Num
    FROM nom_table T1
        LEFT OUTER JOIN nom_table T2 ON T2.Id<T1.Id
        LEFT OUTER JOIN nom_table T3 ON T3.Id>T2.Id AND T3.Id<T1.Id
    WHERE T3.Id IS NULL
    L'enregistrement précédent est un enregistrement dont l'Id est inférieur à l'Id de l'enregistrement en cours et dont aucun autre enregistrement ne se situe entre les 2.

    Ensuite, on peut faire la différence des Num.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.Id, T1.Num, T1.Num-IFNULL(T2.Num,0) AS Diff
    FROM nom_table T1
        LEFT OUTER JOIN nom_table T2 ON T2.Id<T1.Id
        LEFT OUTER JOIN nom_table T3 ON T3.Id>T2.Id AND T3.Id<T1.Id
    WHERE T3.Id IS NULL
    Pour le premier enregistrement, Diff est égal à Num.
    Pour les autres, Diff est égal à Num(Id)-Num(Id-1).

  3. #3
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut
    Re,

    Merci jeremya pour ta réponse.
    Je teste

    Une question qd même : Je ne vois pas qd T2 et T3 sont créées et j'ai un message d'erreur
    Fonction IfNull non définie dans l'expression
    Merci de ton aide

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    En effet, la fonction IfNull n'existe pas sous Access.
    Sous Access, il existe les fonction suivante :



    La requête corrigée est alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT T1.Id, T1.Num, T1.Num-VraiFaux(EstNull(T2.Id);0;T2.Num) AS Diff
    FROM nom_table T1
        LEFT OUTER JOIN nom_table T2 ON T2.Id<T1.Id
        LEFT OUTER JOIN nom_table T3 ON T3.Id>T2.Id AND T3.Id<T1.Id
    WHERE T3.Id IS NULL

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut
    Bonjour,

    j'ai une erreur de syntaxe sur
    T1.Num-VraiFaux(EstNull(T2.Id);0;T2.Num)
    Ne connaissant pas bien le sql, je fais appel à votre aide.

    Merci d'avance

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 103
    Points : 28 393
    Points
    28 393
    Par défaut
    Citation Envoyé par kgb1917
    Bonjour,

    j'ai une erreur de syntaxe sur
    T1.Num-VraiFaux(EstNull(T2.Id);0;T2.Num)

    Ne connaissant pas bien le sql, je fais appel à votre aide.

    Merci d'avance
    C'est du dialecte Access...

    En SQL, ça s'écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    T1.num - coalesce(T2.num, 0)

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 285
    Points : 99
    Points
    99
    Par défaut
    Bonjour,

    J'ai de nouveau un message d'erreur :
    erreur de syntaxe (opérateur absent) dans l'expression 'T2.Id<T1.Id
    LEFT OUTER JOIN nom_table T3 ON T3.Id>T2.Id AND T3.Id<T1.Id'
    Merci de votre aide. Par contre, est-ce que vous pouvez m'expliquer T2 et T3 svp.

Discussions similaires

  1. Soustraction de deux champs d'une même colonne
    Par blivatz dans le forum Développement
    Réponses: 6
    Dernier message: 07/10/2011, 20h30
  2. Réponses: 19
    Dernier message: 20/09/2010, 09h04
  3. Soustraction avec des champs Null
    Par dam28800 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 15/04/2009, 16h57
  4. [SQL] Update et soustraction dans un champ
    Par Artous dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/03/2006, 16h25
  5. Problème de soustraction dans un champ
    Par Tyraelina dans le forum Access
    Réponses: 1
    Dernier message: 18/12/2005, 17h18

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