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 :

requete avec regroupement d'une table


Sujet :

Requêtes PostgreSQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut requete avec regroupement d'une table
    bonjour,

    désolé si je n'utilise pas les bon termes, mais mon niveau en sql est assez basique. je suis en train de migrer un logiciel d'étiquettage d'une base access en postgresql (openerp) et j'arrive pas etraire les données dans toutes ces tables

    pour schématiser, j'ai:
    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
    Table1
    id	code
    12	perceuse
    13 	marteau
    
    Table2
    id	weight
    12	.170
    13 	.500
    
    Table3
    id	id       	name	value
    1	12		color	blue
    2	12		taille	S
    3	13		color	green
    4	13		origin	france
    et je dois obtenir le résultat suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    code      weight   color    taille   origin
    perceuse  .170     blue     S        null
    marteau   .500     green    null     france
    et la je vois comment faire avec la table 3.

    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
    SELECT 
      Table1.code,
      Table2.weight,
      Table3.value AS color,
      Table3.value AS taille,
      Table3.value AS origin
    FROM
     Table1
     INNER JOIN Table3 ON (Table1.id=Table3.id)
     INNER JOIN Table2 ON (Table1.id=Table2.id)
    WHERE
      (Table3.name = 'color') OR 
      (Table3.name = 'taille') OR 
      (Table3.name = 'origine')
     
    me donne
    code      weight   color    taille   origin
    perceuse  .170     blue     blue     
    perceuse  .170     S        S        
    marteau   .500     green             green
    marteau   .500     S                 S
    si vous avez des pistes ou des exemples de quelle code je dois utiliser merci

    Pierre

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Il s'agit donc de transformer des valeurs de champs en champs (colonnes).
    Sous postgresql ça peut se faire avec le module additionnel tablefunc.

    http://www.postgresql.org/docs/8.3/s...tablefunc.html

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    merci pour le lien estofilo
    je vais voir pour installer le module et tester

    J'ai oublié de préciser que le logiciel d'etiquetage est sous windows et se connecte grace au drivers psqlodbc_08_03_0400 sur un serveur avec postgresql 8.3.7 sous linux, j'espere que ca ne pose pas de problème pour les requètes.

    pierre

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,
    Bon je reviens vers vous car j'ai vraiment du mal, jai essayé de construire la requete à partir d'exemples d'ici ou la, mais je n'arrive pas à inserer d'autres tables avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *
    FROM crosstab(
      'select t3.id, t3.name, t3.value 
      from table3 as t3
      where t3.name = ''color'' or t3.name = ''taille'' or t3.name = ''origin''
      order by t3.id,t3.name')
    AS t3(id integer, color text, taille text, origin text)
    la requete pour la création des tables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE table1(serial SERIAL, id integer, code TEXT);
    INSERT INTO table1(id, code) VALUES('12','perceuse');
    INSERT INTO table1(id, code) VALUES('13','marteau');
     
    CREATE TABLE table2(serial SERIAL, id integer, weight integer);
    INSERT INTO table2(id, weight) VALUES('12','170');
    INSERT INTO table2(id, weight) VALUES('13','500');
     
    CREATE TABLE table3(serial SERIAL, id integer, name TEXT, value TEXT);
    INSERT INTO table3(id, name, value) VALUES('12','color', 'blue');
    INSERT INTO table3(id, name, value) VALUES('12','taille', 'S');
    INSERT INTO table3(id, name, value) VALUES('13','color', 'green');
    INSERT INTO table3(id, name, value) VALUES('13','origin', 'france');
    de plus il me range les données bizarrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    id  color  taille   origin
    12   blue   S
    13   green  france
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    id  color  taille   origin
    12   blue     S      null
    13   green  null     france
    C'est pas simple le sql ,Avez vous des exemples ou il y a des jointures avec crosstab?
    Pierre

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Tout simplement, merci au passage à zyphos

    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
    SELECT
      t1.id AS id,
      t1.code AS code,
      t2.weight AS pds,
      t31.value AS color,
      t32.value AS taille,
      t33.value AS origin
     
     FROM table1 AS t1
     
     JOIN table2 AS t2
       ON (t1.id=t2.id)
     
     LEFT JOIN 
       table3 as t31
         ON
           (t31.id=t1.id) AND
           (t31.name='color')
     
     LEFT JOIN 
       table3 as t32
         ON
           (t32.id=t1.id) AND
           (t32.name='taille')
     
    LEFT JOIN 
       table3 as t33
         ON
           (t33.id=t1.id) AND
           (t33.name='origin')

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

Discussions similaires

  1. requete avec regroupement multi tables
    Par Fxg dans le forum Requêtes et SQL.
    Réponses: 21
    Dernier message: 26/07/2006, 21h53
  2. Somme dans une requete avec regroupement
    Par louroulou dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 19/07/2006, 21h20
  3. INSERT avec condition d'une table à une autre
    Par papipasto dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/03/2006, 13h51
  4. Problème avec affichage d'une table modifiée
    Par auriolbeach dans le forum Access
    Réponses: 6
    Dernier message: 31/10/2005, 15h45
  5. Réponses: 6
    Dernier message: 26/07/2005, 10h20

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