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

Jasper Discussion :

Ne pas afficher les doublons dans mon rapport


Sujet :

Jasper

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 25
    Points : 14
    Points
    14
    Par défaut Ne pas afficher les doublons dans mon rapport
    Bonne et heureuse année nouvelle à tous.
    J'ai deux table nommées table1 et table2.
    dans table1 j'ai le champ detat qui peut prendre des donnée; consultation,hospitalisation par exemple.
    Je compte afficher toutes les données de ce champ tout en faisant une jointure avec la table prestation_services.
    Dans le resultat de ma requette sql,j'ai deux deux enregistrement,ce qui est normale.
    Dans mon rapport il m'affiche les deux bloc d'enregistrement de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    date bon: 12/12/201date 
    nom & prenom: Java
    age: 12
    sexe: Masculin
    actes: Consultation
     
    date bon: 12/12/201date 
    nom & prenom: Java
    age: 12
    sexe: Masculin
    actes: Hospitalisation
    Vous voyez que les champs date bon,nom,sexe sont les memes données que je ne veux pas repéter.

    Je voudrais afficher dans mon rapport de cette manière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    date bon: 12/12/201date 
    nom & prenom: Java
    age: 12
    sexe: Masculin
    actes: Hospitalisation,Consultation
    Un seul bloc qui me permettra d'avoir dans le champ acte: les enregegistrements Hospitalisation,Consultation.
    Je ne sais s'il ya une possibilité de le faire.
    Quelqu'un peut-il m'aider?
    Merci d'avance


    Voici le resultat de requette en image
    Cependant

  2. #2
    Membre éprouvé

    Inscrit en
    Janvier 2009
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 467
    Points : 1 253
    Points
    1 253
    Billets dans le blog
    2
    Par défaut
    Moi je travaillerais cela directement au niveau SQL.

    Changer la jointure ou ajouter l'option DISTINCT (SELECT DISTINCT a, b, c, d FROM...)

    Sans voir les tables et/ou la requète SQL c'est difficile d'en dire plus

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 25
    Points : 14
    Points
    14
    Par défaut
    Bonsoir jmini.
    Je m'excuse pour ce grand retard.
    Je suis toujours dans mon problème.
    Voici les deux tables avec quelques données:

    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
    -- 
    -- Structure de la table `prestation_services`
    -- 
     
    CREATE TABLE `prestation_services` (
      `idserv` int(10) unsigned NOT NULL auto_increment,
      `datbn` varchar(20) default NULL,
      `Nquit` varchar(20) default NULL,
      `nompren` text,
      `age` varchar(50) NOT NULL,
      `sexe` varchar(20) default NULL,
      `prov` varchar(45) default NULL,
      `numbon` int(11) default NULL,
      `netpay` double NOT NULL,
      `remi` double default NULL,
      `total` double NOT NULL,
      PRIMARY KEY  (`idserv`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
     
    -- 
    -- Contenu de la table `prestation_services`
    -- 
     
    INSERT INTO `prestation_services` (`idserv`, `datbn`, `Nquit`, `nompren`, `age`, `sexe`, `prov`, `numbon`, `netpay`, `remi`, `total`) VALUES 
     
    (3, '12/12/2010', '14', 'Oui', '12', 'Masculin', ' Atakpamé', 2, 5700, 0, 5700);
    La table Tempon:
    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
    -- 
    -- Structure de la table `tempon`
    -- 
     
    CREATE TABLE `tempon` (
      `id` int(11) NOT NULL auto_increment,
      `numbon` int(11) NOT NULL,
      `detat` varchar(50) NOT NULL,
      `mnt` double NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=38 ;
     
    -- 
    -- Contenu de la table `tempon`
    -- 
     
    INSERT INTO `tempon` (`id`, `numbon`, `detat`, `mnt`) VALUES 
    (36, 2, 'Consultation', 700),
    (37, 2, 'Hospitalisation', 5000);
    Et voici ma requette:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT a.datbn, a.Nquit, a.nompren, a.age, a.sexe, a.prov, a.numbon, a.netpay, a.remi, a.total, b.detat, b.mnt
    FROM prestation_services AS a, tempon AS b
    WHERE a.numbon = b.numbon
    AND nompren = 'Oui'
    GROUP BY detat
    Mais toujours le resultat ci-dessus.

    Je compte sur vous pour un coup de main.
    merci d'avance

  4. #4
    Membre éprouvé

    Inscrit en
    Janvier 2009
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 467
    Points : 1 253
    Points
    1 253
    Billets dans le blog
    2
    Par défaut
    Un petit coup de recherche dans la doc de MySQL. Il existe la function GROUP_CONCAT dispo avec un exemple.

    Adapté à ton problème (juste sur la table tempon, il faudrait refaire le join) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT numbon,
    GROUP_CONCAT(DISTINCT detat ORDER BY detat SEPARATOR ', ' ) as actes
    FROM tempon
    GROUP BY numbon;
    Pour iReport actes est un champ String comme un autre.

    Sur la même page d'aide, on trouve aussi une fonction pour sommer (si par hasard il fallait sommer le montant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT numbon,
    GROUP_CONCAT(DISTINCT detat ORDER BY detat SEPARATOR ', ' ) as actes,
    SUM(mnt) as mnt_total
    FROM tempon
    GROUP BY numbon;
    Donne le resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    +--------+-------------------------------+-----------+
    | numbon | actes                         | mnt_total |
    +--------+-------------------------------+-----------+
    |      2 | Consultation, Hospitalisation |      5700 | 
    +--------+-------------------------------+-----------+
    Autre chose, je ne suis pas certain du type de JOIN qu'il faut faire. Peut-être qu'une subquery est plus rapide.

    __________________________________________________________

    Enfin j'avais mal répondu la première fois. C'est possible d'utiliser iReport.

    Si les donnée en entrée sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    +------------+-------+---------+-----+----------+------------+--------+--------+------+-------+-----------------+------+
    | datbn      | Nquit | nompren | age | sexe     | prov       | numbon | netpay | remi | total | detat           | mnt  |
    +------------+-------+---------+-----+----------+------------+--------+--------+------+-------+-----------------+------+
    | 12/12/2010 | 14    | Oui     | 12  | Masculin |  Atakpamé  |      2 |   5700 |    0 |  5700 | Consultation    |  700 | 
    | 12/12/2010 | 14    | Oui     | 12  | Masculin |  Atakpamé  |      2 |   5700 |    0 |  5700 | Hospitalisation | 5000 | 
    +------------+-------+---------+-----+----------+------------+--------+--------+------+-------+-----------------+------+
    Il faut faire un groupe dans le rapport sur numbon (gp_numbon).
    Créer des variables qui vont faire la concaténation ou la somme. (réinitialise à chaque groupe gp_numbon)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //Bande header de gp_numbon
    date bon: 12/12/201date 
    nom & prenom: Java
    age: 12
    sexe: Masculin
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    //Bande de detail vide et nulle (la supprimer ou la mettre à 0)
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    //Bande footer de gp_numbon
    //Affiche les variables de concatenation
    actes: Hospitalisation

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 25
    Points : 14
    Points
    14
    Par défaut
    Je ne saurais vous remercier,jmini, pour votre soutient.

    Cependant,j'ai un autre souci.
    Ma requette marche très bien comme je le voulais dans mysql cependant quand je le mets dans irepport pour me generer le fichier XML il m'affiche cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Field not found : GROUP_CONCAT( DISTINCT detat
    ORDER BY detat
    SEPARATOR ', ' )
    Voici ma requette:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT a.datbn, a.Nquit,a.numbon, a.nompren, a.age, a.sexe, a.prov,a.service,GROUP_CONCAT( DISTINCT detat
    ORDER BY detat
    SEPARATOR ', ' ) , a.netpay, a.remi, a.total
    FROM prestation_services AS a, tempon AS b
    WHERE a.numbon = b.numbon
    AND a.numbon =4
    GROUP BY numbon
    Je ne sais que faire pour l'instant.
    Merci pour votre soutient.

  6. #6
    Membre éprouvé

    Inscrit en
    Janvier 2009
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 467
    Points : 1 253
    Points
    1 253
    Billets dans le blog
    2
    Par défaut
    En essayant la requête dans un client MySQL j'ai :
    ERROR 1054 (42S22): Unknown column 'a.service' in 'field list'
    Ensuite comme je l'ai indiqué dans mes exemples je pense qu'il est important de renommer le champ obtenu par concaténation. (je pense que JasperReport l'utilise comme identifiant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP_CONCAT(DISTINCT detat ORDER BY detat SEPARATOR ', ' ) AS actes

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 25
    Points : 14
    Points
    14
    Par défaut
    Un grand merci à vous jmini.

    ça marche très bien.

    Encore une fois merci beaucoup à vous
    C'est vraiment très gentil de votre part

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/04/2009, 21h10
  2. Réponses: 6
    Dernier message: 25/04/2008, 12h44
  3. comment ne pas afficher les zéro dans un diagramme à barres empilées
    Par sebastien84 dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 10/10/2007, 12h17
  4. Réponses: 11
    Dernier message: 04/07/2007, 18h22
  5. ne pas afficher les doublons
    Par axamen dans le forum SQL
    Réponses: 17
    Dernier message: 23/05/2007, 13h45

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