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

Oracle Discussion :

Afficher des valeurs selon les colonnes


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Mai 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 47
    Par défaut Afficher des valeurs selon les colonnes
    Bonjour,
    j'ai un problème d'affichage des données. en fait quand j'execute ma requête sous sql,les informations sont imbriquées. j'ai deux colonnes et au lieu que j'ai
    colonne a colonne b
    1 toto
    2 tata
    3 titi
    j'ai plutôt
    colonne a
    1
    toto
    2
    tata
    3
    titi
    je vous joins le script svp, si quelqu'un a une idée. merci.
    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 B.classe, count (*) nombre from
    (select a.classs classe,
    rpad(a.INSUREDD||' '||f.namee,50) Assuré,
    nvl(sum(decode(doc_typee,13,nvl(amountt,0))),0) Montant_Reg
       from cl_gen a,cl_td C,broker e,insured f
      where a.cl_numm=c.cl_numm(+)
        and a.brokerr(+) = e.brokerr
        and a.insuredd=f.insuredd
        and nvl(decode(doc_typee,12,decode(postingg,1,amountt,2,amountt*-1),13,amountt*-1),0) !=0
        and c.document_datee(+) between '01/01/2012' and '31/12/2012'
    group by a.INSUREDD||' '||f.namee,bro_sub_typee, a.classs)B
    group by B.classe
    union
    SELECT distinct A.classe,A.Montant_sp
     FROM
     (select
            distinct a.classs classe,
            nvl(sum(decode(doc_typee,13,decode(postingg,2,amountt,1,amountt*-1))),0) Montant_sp
       from cl_gen a,cl_td c,broker e
      where a.cl_numm =c.cl_numm(+)
        and a.brokerr(+) = e.brokerr
        and a.bro_ins in (1,2)
        and c.document_datee(+) between '01/01/2012' and '31/12/2012'
     group by
              a.classs
     having nvl(sum(decode(doc_typee,13,decode(postingg,2,amountt,1,amountt*-1))),0) <> 0
     ) A
     WHERE A.Montant_sp <>0
     GROUP BY A.classe,A.Montant_sp
    merci

  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 : 62
    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
    C'est une horreur cette requête !

    1) Les jointures s'écrivent depuis 20 ans avec l'opérateur JOIN ; il serait temps de s'y mettre !

    2) En SQL, " différent de " s'écrit <> et non pas !=

    3) Un code indenté et aéré est plus agréable à lire et à débugguer.

    4) Dans la deuxième sous-requête, la condition a.bro_ins IN (1,2) n'étant pas " plussée ", elle transforme la jointure externe sur a en jointure interne. Voir mon blog pour plus d'explication.

    Du moins si j'ai correctement interprété ce maudit et obsolète + dans la requête comme signalant la table externe de la jointure.

    5) Dans la seconde requête de l'UNION, DISTINCT + GROUP BY, c'est ceinture et bretelle ! Le GROUP BY est inutile puisqu'il n'y a pas de fonction de groupage dans le SELECT.

    Voici votre requête récrite :
    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
    33
    34
    35
    SELECT B.classe,
    	count(*) nombre
    FROM
    (
    	SELECT a.classs classe,
    		rpad(a.INSUREDD||' '||f.namee,50) Assuré,
    		nvl(sum(decode(doc_typee,13,nvl(amountt,0))),0) Montant_Reg
    	FROM broker e
    	LEFT OUTER JOIN cl_gen a ON a.brokerr = e.brokerr
    		LEFT OUTER JOIN cl_td C
    			ON a.cl_numm = c.cl_numm
    			AND c.document_datee BETWEEN '01/01/2012' AND '31/12/2012'
    		INNER JOIN insured f ON a.insuredd = f.insuredd
    	WHERE nvl(decode(doc_typee, 12, decode(postingg, 1, amountt, 2, amountt*-1), 13, amountt*-1), 0) <> 0
    	GROUP BY a.INSUREDD||' '||f.namee, bro_sub_typee, a.classs
    ) B
    GROUP BY B.classe
    UNION
    SELECT DISTINCT A.classe, A.Montant_sp
    FROM
    (
    	SELECT DISTINCT
    		a.classs classe,
    		nvl(sum(decode(doc_typee, 13, decode(postingg, 2, amountt, 1,amountt*-1))), 0) Montant_sp
    	FROM broker e
    	LEFT OUTER JOIN cl_gen a
    		ON a.brokerr = e.brokerr
    		AND a.bro_ins IN (1,2)
    		LEFT OUTER JOIN cl_td c
    			ON a.cl_numm = c.cl_numm
    			AND c.document_datee BETWEEN '01/01/2012' AND '31/12/2012'
    	GROUP BY a.classs
    	HAVING nvl(sum(decode(doc_typee,13, decode(postingg, 2, amountt, 1, amountt*-1))), 0) <> 0
    ) A
    WHERE A.Montant_sp <> 0
    Ceci étant dit, je ne comprends pas votre problème :
    j'ai deux colonnes et au lieu que j'ai
    colonne a colonne b
    La requête doit effectivement retourner deux colonnes de résultats.

    1 toto
    2 tata
    3 titi
    Normalement, elle devrait plutôt retourner, dans l'ordre, un texte puis un nombre !

    j'ai un problème d'affichage des données
    Affichage où ça ?
    Le problème ne viendrait-il pas plutôt du programme d'affichage ?
    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 actif
    Inscrit en
    Mai 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 47
    Par défaut problème de programmation d'affichage
    Merci pour toutes ces remarques, j'ai corrigé. seulement voilàà le problème b'est pas reglé. voilà le resultat:
    CL NOMBRE
    -- ---------
    2 1
    3 34
    3 81145219
    4 490
    4 503387973
    5 9
    5 60555217
    7 12
    7 1911360
    8 2
    8 230000
    9 2
    9 438600
    ce n'est pas ce que je veux:
    je voudrais ceci
    CL NOMBRE MONTANT
    -- ---------
    3 34 81145219
    4 490 503387973
    5 9 60555217
    7 12 1911360
    8 2 230000
    9 2 438600

    c'est possible je le sais mais je ne sais pas comment faire

  4. #4
    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 : 62
    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
    Donc en fait vous voulez trois colonnes de résultat !

    Il faut ajouter une colonne fictive dans les deux requêtes de l'UNION. Je ne redonne que les SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT B.classe,
    	count(*) nombre,
    	0 montant
    -- ...
    UNION
    SELECT DISTINCT A.classe, 0 nombre, A.Montant_sp
    -- ...
    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 !

  5. #5
    Membre actif
    Inscrit en
    Mai 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 47
    Par défaut problème de programmation d'affichage de données sql
    j'ai exzcuté et j'ai ceci. c'est déjà bon,mais il faut que les les montants et les nombres soient sur la même ligne. pour cela je dois trouver comment demander à sql que la CL A=CL B et c'est cela le véritable problème. comment faire? je joins ma requête.

    voilà ce que j'obtient déjà

    CL MONTANT NOMBRE
    -- ---------- ---------
    2 1
    3 81145219
    3 34
    4 503387973
    4 492
    5 60555217
    5 9
    7 1911360
    7 12
    8 230000
    8 2
    9 438600
    9 2

    je joins le code
    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
    33
    34
    35
    36
    37
    38
    SELECT B.classe,
    B.Montant_sp,
    	count(*) nombre
    FROM
    (
    	SELECT a.classs classe,
    		rpad(a.INSUREDD||' '||f.namee,50) Assuré,
    		null Montant_sp
    	FROM broker e
    	LEFT OUTER JOIN cl_gen a ON a.brokerr = e.brokerr
    		LEFT OUTER JOIN cl_td C
    			ON a.cl_numm = c.cl_numm
    			AND c.document_datee BETWEEN '01/01/2012' AND '31/12/2012'
    		INNER JOIN insured f ON a.insuredd = f.insuredd
    	WHERE nvl(decode(doc_typee, 12, decode(postingg, 1, amountt, 2, amountt*-1), 13, amountt*-1), 0) <> 0
    	GROUP BY a.INSUREDD||' '||f.namee, bro_sub_typee, a.classs
    ) B
    GROUP BY B.classe, B.Montant_sp
    UNION
    SELECT DISTINCT A.classe, A.Montant_sp, A.nombre 
    FROM
    (
    	SELECT DISTINCT
    		a.classs classe,
                    null nombre,
    		nvl(sum(decode(doc_typee, 13, decode(postingg, 2, amountt, 1,amountt*-1))), 0) Montant_sp
    	FROM broker e
    	LEFT OUTER JOIN cl_gen a
    		ON a.brokerr = e.brokerr
    		AND a.bro_ins IN (1,2)
    		LEFT OUTER JOIN cl_td c
    			ON a.cl_numm = c.cl_numm
    			AND c.document_datee BETWEEN '01/01/2012' AND '31/12/2012'
    	GROUP BY a.classs
    	HAVING nvl(sum(decode(doc_typee,13, decode(postingg, 2, amountt, 1, amountt*-1))), 0) <> 0
    ) A
    WHERE A.Montant_sp <> 0
    /

  6. #6
    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 : 62
    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
    Dans ce cas, ce n'est plus une UNION qu'il faut faire mais une jointure entre les deux requêtes.
    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 !

  7. #7
    Membre actif
    Inscrit en
    Mai 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 47
    Par défaut problèmeprogrammation affichage
    Merci je m'en suis sortie, j'ai declaré une variable c qui englobe les deux autres valeurs avec une jointure au niveau de classe

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

Discussions similaires

  1. [XL-2013] VBA - Afficher des résultats selon les variables demandés par l'utilisateur
    Par JOKER6 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/05/2015, 00h22
  2. [XL-2007] Selection avec répartition des valeurs sur les colonnes
    Par lili31 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 20/04/2012, 10h16
  3. Réponses: 2
    Dernier message: 05/01/2012, 16h37
  4. Réponses: 4
    Dernier message: 21/07/2011, 15h25
  5. Réponses: 6
    Dernier message: 09/12/2007, 14h32

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