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 :

sql iseries V5R4


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Juin 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 1
    Par défaut sql iseries V5R4
    bonjour,

    avec la requete suivante j'obtient le resultat suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ncli, nart, substr(a4m2, 1, 4) as per, sum(do01)
    FROM st4std 
    WHERE a4m2 >= 200801                       
    and a4m2 <= 200912 
    and ncli ='00053729'                
    group by ncli, nart, substr(a4m2, 1, 4)
    N° Client N° Article PER SUM ( DO01 )
    00053729 8857014086 2008 44.250,00
    00053729 8857014086 2009 30.000,00
    00053729 8857015206 2009 37.500,00
    00053729 8869011996 2008 25.080,00
    00053729 8869013396 2008 47.880,00
    00053729 8869013396 2009 27.930,00
    00053729 8869015236 2009 25.080,00
    00053729 8877012076 2008 63.000,00
    00053729 8877015796 2009 16.200,00
    00053729 8877015816 2009 26.400,00
    00053729 8877711866 2008 13.200,00

    je souhaite presenter mon resultat de la sorte:
    N° Client N° Article PER PER+1 SUM ( DO01 ) sum(do01)+1
    00053729 8857014086 2008 2009 44.250,00 30.000,00
    etc...

    comment puis je faire?

    Par avance merci de votre aide!!!!

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ce que vous cherchez à faire est de la cosmétique et n'est pas le boulot du SGBD mais celui du programme utilisateur de la BDD.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Ben Cinephile, ça permettrait notamment de calculer une variation de la grandeur... ce qui est plus rationnel que cosmétique !

    Question : SQL iseries, c'est juste le client ?
    Le SGBD, c'est du DB2 ou un truc du genre ?

    Bon l'idéal, ç'eut été d'avoir droit aux fonctions analytiques (le top, c'est lead / lag)

    Sinon, la solution est de faire une autojointure de ton aggrégat de base.
    Ce que tu veux, c'est pour chaque ligne, récupérer la ligne du même client / article correpsondant à l'année la plus proche (vers le futur)...
    ... soit potentiellement un désastre niveau perf !

    Sauf si tu as une condition particulière du genre : "Il n'y a pas de trou dans les périodes".
    Dans quel cas, ça donne :
    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
     
    SELECT a.ncli, a.nart, a.per, b.per, a.do01, b.do01
    FROM (
            SELECT ncli, nart, substr(a4m2, 1, 4) AS per, sum(do01) do01
            FROM st4std 
            WHERE a4m2 >= 200801                       
            AND a4m2 <= 200912 
            AND ncli ='00053729'                
            GROUP BY ncli, nart, substr(a4m2, 1, 4)) a
        LEFT OUTER JOIN
             (
            SELECT ncli, nart, substr(a4m2, 1, 4) AS per, sum(do01) do01
            FROM st4std 
            WHERE a4m2 >= 200801                       
            AND a4m2 <= 200912 
            AND ncli ='00053729'                
            GROUP BY ncli, nart, substr(a4m2, 1, 4)) b
        ON a.ncli = b.ncli AND a.nart = b.nat AND a.per = b.per - 1

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/01/2014, 14h05
  2. [V5R4] Plan Cache SQL
    Par punkoff dans le forum AS/400
    Réponses: 8
    Dernier message: 12/06/2009, 09h30
  3. Réponses: 6
    Dernier message: 20/05/2009, 09h35
  4. Réponses: 7
    Dernier message: 11/09/2008, 00h12
  5. DB2 [Micro et Iseries] TRI SQL sur un for update
    Par fweiner dans le forum DB2
    Réponses: 4
    Dernier message: 21/08/2008, 10h35

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