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 :

Probleme requete SQL


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 114
    Points : 67
    Points
    67
    Par défaut Probleme requete SQL
    Bonjour tout le monde,

    j'ai une table emp et tient comme champs (EMPNO, ENAME, JOB, DEPTNO)

    la table est comme suite:

    EMPNO-ENAME----JOB---------DEPTNO

    1------ scott-----clerk--------10
    2------ chijai-----pres---------10
    3------ trfaie-----clerk--------20
    4------ matio-----clerk--------10
    5------ naide-----pres---------20
    1------ tarmit----pres---------20

    moi ce que je veux c'est d'apres une requete je veux afficher
    10-->scott - chijai - matio
    20-->trfaie - naide - tarmit

    pour chque departement je veux afficher les noms des ces employes concatenes.

    Alors les amis est ce que vous avez des idees?

    Merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    merci de donner le nom et la version du SGBDR (lire la charte) mais vu la table de la base exemple j'imagine que c'est oracle

    sinon ta question a été posée 12 millions de fois: SQL n'est pas fait pour mettre en forme les données. Il faut utiliser l'application cliente pour cela. Par exemple sous Excel c'est transposer.

    Il y a des solutions de contournements: utiliser des fonctions analytiques, ou utiliser des alias repétés d'une même table avec des fonctions de regroupement.

  3. #3
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    tu seras obligés de passer par une procédure pl/sql

    select distinct deptno into v_deptno from emp
    ensuite tu boucle
    select ename into v_ename from emp where deptno=v_deptno
    tu boucle et tu affcihe les v_ename

  4. #4
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 114
    Points : 67
    Points
    67
    Par défaut
    Je sais travailler avec PL/SQL de resoudre ce genre de requete mais actuellement je suis obligé de travailler avec SQL standard, Donc si je comprends bien il n'y a pas de solutions pour ce probleme!!!!?

  5. #5
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    si si c'est possible, de mémoire ça donne quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select deptno,max(ename1)||'-'||max(ename2)||'-'||max(ename3)
    FROM 
    (
        select e1.deptno,e1.ename ename1,e2.ename ename2,e3.ename ename3
        from emp e1
        left join emp e2 on e1.deptno=e2.deptno and e1.empno<e2.empno
        left join emp e3 on e2.deptno=e3.deptno and e2.empno<e3.empno
       -- etc.. si besoin de colonnes supplémentaires
    )
    GROUP BY deptno
    Le max est pour supprimer les lignes nulles correspondantes aux jointures externes générées par e1.empno<e2.empno.

    Il y a d'autres solutions similaires avec des UNION et MAX en SQL standard (ou alors des fonctions analytiques en SQL pas faites pour cela à l'origine donc usine à gaz)

  6. #6
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 114
    Points : 67
    Points
    67
    Par défaut
    merci pour votre aide, j'ai teste la requete mais voila la resultat

    10 MILLER-MILLER-MILLER
    20 SMITH-SMITH-SMARTH
    25 SUE-SUE-FORD
    30 WARD-WARD-TURNER

    premierement c'est la redondance.
    deuxiement si on ne connait pas le nombre d'enregistrement, comment pouvons nous reformuler cette requete?

    Merci

  7. #7
    Expert éminent
    Homme Profil pro
    Big Data / Freelance EURL
    Inscrit en
    Mars 2003
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Big Data / Freelance EURL

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 124
    Points : 7 291
    Points
    7 291
    Par défaut
    et ça ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT deptno,max(ename1)||'-'||max(ename2)||'-'||max(ename3)
    FROM 
    (
        SELECT e1.deptno,e1.ename ename1,e2.ename ename2,e3.ename ename3
        FROM emp e1
        LEFT JOIN emp e2 ON e1.deptno=e2.deptno 
        LEFT JOIN emp e3 ON e2.deptno=e3.deptno 
       -- etc.. si besoin de colonnes supplémentaires
        WHERE e1.empno<e2.empno and e2.empno<e3.empno
    )
    GROUP BY deptno
    Elle n'est pas dynamique sur le nombre de colonnes.

    Sinon y'a ça mais je ne fais pas le Service Après Vente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT id_util,LTRIM(Liste, '; ')
    FROM (
      SELECT id_util, id_prof, Liste, Niveau, MAX(niveau) OVER (PARTITION BY id_util) max_niv
      FROM (
         SELECT up1.id_util, up1.id_prof, PRIOR up1.id_prof, LEVEL AS niveau, 
               sys_connect_by_path(up1.id_prof, '; ') AS Liste 
         FROM UTIL_PROFIL up1
         CONNECT BY id_util = PRIOR id_util AND up1.id_prof > PRIOR up1.id_prof
             )
     )
    WHERE niveau = max_niv;

Discussions similaires

  1. [MySQL] Probleme requete sql et code html
    Par needles94000 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/03/2006, 17h38
  2. [Access] Probleme requete SQL
    Par kissmytoe dans le forum Langage SQL
    Réponses: 11
    Dernier message: 24/02/2006, 15h25
  3. probleme requete SQL
    Par grochenel dans le forum Langage SQL
    Réponses: 7
    Dernier message: 12/12/2005, 09h26
  4. [MySQL] probleme requete sql et php
    Par digger dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 10/10/2005, 14h15
  5. probleme requete sql
    Par Shosho dans le forum Langage SQL
    Réponses: 12
    Dernier message: 03/05/2005, 09h25

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