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

Requêtes PostgreSQL Discussion :

Formatage du contenu des lignes [9.2]


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut Formatage du contenu des lignes
    Table des numéros de série :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE public.numeros_serie (
      numero_serie_id BIGINT NOT NULL,
      art_id INTEGER NOT NULL,
      numero_serie_text TEXT NOT NULL,
      CONSTRAINT numeros_serie_pkey PRIMARY KEY(numero_serie_id),
      CONSTRAINT num_serie_fk_art_id FOREIGN KEY (art_id)
        REFERENCES public.articles(art_id)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION
        NOT DEFERRABLE
    );
    Tables mouvements des numéros de série :
    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
    CREATE TABLE public.numeros_serie_mouv (
      numero_serie_id BIGINT NOT NULL,
      date_mouv DATE DEFAULT now() NOT NULL,
      achat_id BIGINT,
      offre_id BIGINT,
      vente_id BIGINT,
      CONSTRAINT numeros_serie_mouv_chk CHECK (((((achat_id IS NOT NULL) AND (offre_id IS NULL)) AND (vente_id IS NULL)) OR (((achat_id IS NULL) AND (offre_id IS NOT NULL)) AND (vente_id IS NULL))) OR (((achat_id IS NULL) AND (offre_id IS NULL)) AND (vente_id IS NOT NULL))),
      CONSTRAINT numeros_serie_mouv_fk_achat_id FOREIGN KEY (achat_id)
        REFERENCES public.achats(achat_id)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION
        NOT DEFERRABLE,
      CONSTRAINT numeros_serie_mouv_fk_numero_serie_id FOREIGN KEY (numero_serie_id)
        REFERENCES public.numeros_serie(numero_serie_id)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION
        NOT DEFERRABLE,
      CONSTRAINT numeros_serie_mouv_fk_offre_id FOREIGN KEY (offre_id)
        REFERENCES public.offres(offre_id)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION
        NOT DEFERRABLE,
      CONSTRAINT numeros_serie_mouv_fk_vente_id FOREIGN KEY (vente_id)
        REFERENCES public.ventes(vente_id)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION
        NOT DEFERRABLE
    );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM numeros_serie
    20160100001,7072,15B0NAN465100

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM numeros_serie_mouv
    20160100001,2016-01-19,20160100020,(null),(null)
    20160100001,2015-12-24,(null),(null),20151200890

    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
    SELECT 
    numeros_serie.numero_serie_id AS "Id", numeros_serie.art_id AS "Id", 
     
    nom_article AS "Nom", 
    numero_serie_text AS "Id", 
     
    achat_id AS "Achat", 
    offre_id AS "Offre", 
    vente_id AS "Vente", 
    date_mouv AS "Date" 
     
    FROM numeros_serie 
     
    LEFT OUTER JOIN noms_article       ON numeros_serie.art_id = noms_article.art_id AND langue_id = 0
    LEFT OUTER JOIN numeros_serie_mouv ON numeros_serie.numero_serie_id = numeros_serie_mouv.numero_serie_id 
     
    ORDER BY numeros_serie_mouv.date_mouv
    Donne :

    20160100001,7072,Synology Disk Station DS416j,15B0NAN465100,(null),(null),20151200890,2015-12-24
    20160100001,7072,Synology Disk Station DS416j,15B0NAN465100,20160100020,(null),(null),2016-01-19

    Mais je voudrais avoir:

    20160100001,7072,Synology Disk Station DS416j,15B0NAN465100,(null),(null),20151200890,2015-12-24
    (null),(null),(null),(null),20160100020,(null),(null),2016-01-19

    Ce qui serait visuellement bcp mieux. J'affiche cela dans une JTable qui transforme les valeur (null) par une cellule vide.

    Un moyen d'y parvenir ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Si je comprends bien, au lieu d'avoir par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DEPARTMENT_ID LAST_NAME                     SALARY
    ------------- ------------------------- ----------
               20 Hartstein                      13000
               80 Russell                        14000
               80 Partners                       13500
               90 King                           24000
               90 Kochhar                        17000
               90 De Haan                        17000
    Vous souhaitez avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DEPARTMENT_ID LAST_NAME                     SALARY
    ------------- ------------------------- ----------
               20 Hartstein                      13000
               80 Russell                        14000
                  Partners                       13500
               90 King                           24000
                  Kochhar                        17000
                  De Haan                        17000
    C'est du formatage, donc à réaliser côté client.

    C'est donc par exemple JTable qui devrait pouvoir vous fournir une logique de fusion de ligne quand il y a répétition.
    La base, elle, ne réalise pas ce genre de formatage, c'est de la donnée brut.

    Après vous pouvez probablement combiner LAG et CASE pour faire du formatage, mais c'est dans ce cas précis de la ressource système mal employée.

  3. #3
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Comme ceci :

    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
    SELECT 
    LAG(numeros_serie.numero_serie_id) OVER (ORDER BY numeros_serie.numero_serie_id), 
    LAG(numeros_serie.art_id) OVER (ORDER BY numeros_serie.art_id),
    LAG(nom_article) OVER (ORDER BY nom_article), 
    LAG(numero_serie_text) OVER (ORDER BY numero_serie_text), 
     
    achat_id AS "Achat", 
    offre_id AS "Offre", 
    vente_id AS "Vente", 
    date_mouv AS "Date" 
     
    FROM numeros_serie 
     
    LEFT OUTER JOIN noms_article       ON numeros_serie.art_id = noms_article.art_id AND langue_id = 0
    LEFT OUTER JOIN numeros_serie_mouv ON numeros_serie.numero_serie_id = numeros_serie_mouv.numero_serie_id 
     
    ORDER BY numeros_serie_mouv.date_mouv
    C'est exactement ce que je voulais.

    Merci de m'avoir mis sur la voie.

  4. #4
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Avec plus de données c'est pas tout a fait ça...

    Si qlq a une idée...Nom : Image du presse-papiers.png
Affichages : 288
Taille : 111,3 Ko

  5. #5
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Je vais faire autrement...désolé du dérangement.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 02/09/2009, 18h49
  2. Aide en ligne
    Par étoile dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 14h00
  3. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08
  4. Couleur des lignes dans DBGrid
    Par eddie dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/06/2002, 18h15
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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