SQL 2 colonnes qui ont la même condition

Résolu
julien37 -  
 Kicyfroth -
Bonjour à tous,

En fait je travail sur deux tables différentes. Dans une table j'ai deux colonnes (Gérant et Comptable) avec des numéros et dans une autre table j'ai une liste de numéro qui correspond à chaque fois à un nom.

J'aimerais que pour chaque ligne il me mette le nom du gérant et sur la colonne d'à côté celui du comptable. J'ai testé deux requêtes qui me mettent les résultats sur deux lignes au lieu d'une seule.

J'aimerai savoir s'il est possible d'avoir l'information sur une seule ligne. Je vous propose les deux différentes requêtes que j'ai effectuées :

SELECT Noimme,Nomimme,MONTH(i.Datfinex) as MoisArrete, Nomper
FROM sql_sgti.immeuble i,sql_sgti.personnalite p
where Nomimme not like '%*%' and (Noresp=p.Noperso or NoCompta=p.Noperso)
order by MoisArrete,Nomper,Noimme;

SELECT Noimme,Nomimme,MONTH(i.Datfinex) as MoisArrete,
IF(Noresp=p.Noperso,Nomper,0),
IF(NoCompta=p.Noperso,Nomper,0)
FROM sql_sgti.immeuble i,sql_sgti.personnalite p
where Nomimme not like '%*%' and (Noresp=p.Noperso or NoCompta=p.Noperso)
order by MoisArrete,Nomper,Noimme;

Suis'je sur la bonne piste avec l'une d'entre elle?? Qu'est-ce que j'oublie??

Merci d'avance à tous,
Julien
Configuration: Windows XP Internet Explorer 7.0

13 réponses

  1. Kicyfroth
     
    Tu peux montrer les résultats des requêtes ? Ou une partie si c'est gros ?
    0
  2. Kicyfroth
     
    Et aussi quelques exemples d'enregistrements de tes tables ? C'est pas très clair tes noms de champs
    0
  3. julien37
     
    Le résultat que je cherche c'est ça :

    Noimme Nomimme MoisArrete Nomges Nomcompta
    7005 XXX 3 BRICHET CHAPRON
    7007 YYY 3 BRICHET CHAPRON
    0015 ZZZ 3 DESMAISONS KAMLI

    Avec la première requête ça me donne ça :

    Noimme Nomimme MoisArrete Nomper
    7005 XXX 3 BRICHET
    7007 YYY 3 BRICHET
    7005 XXX 3 CHAPRON
    7007 YYY 3 CHAPRON
    0015 ZZZ 3 DESMAISONS
    0015 ZZZ 3 KAMLI

    Avec la deuxième ça donne ça :

    Noimme Nomimme MoisArrete IF(Noresp=p.Noperso,Nomper,0) IF(NoCompta=p.Noperso,Nomper,0)
    7005 XXX 3 BRICHET 0
    7007 YYY 3 BRICHET 0
    7005 XXX 3 0 CHAPRON
    7007 YYY 3 0 CHAPRON
    0015 ZZZ 3 DESMAISONS 0
    0015 ZZZ 3 0 KAMLI
    0
  4. Kicyfroth
     
    Bon déjà tu veux 5 champs et t'en demandes que 4 dans ton select.
    Il faut grouper par immeuble je pense. Essayes :

    SELECT Noimme,Nomimme,MONTH(i.Datfinex) as MoisArrete, Nomper, NoCompta
    FROM sql_sgti.immeuble i,sql_sgti.personnalite p
    where Nomimme not like '%*%' and (Noresp=p.Noperso or NoCompta=p.Noperso)
    group by Noimme;
    order by MoisArrete,Nomper,Noimme
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Kicyfroth
     
    Oups ! En mettant le point virgule à la ligne d'en dessous ^^
    0
  7. julien37
     
    En fait c'est ce que je recherche pour les 4 premières colonnes sauf que pour la 5ème, au lieu des numéros compta, je veux le nom des comptables.

    Ce nom est dans la même colonne et la même table que le nom des responsable. Le numéro des perso de la table personnalité peut etre soit un numéro de resp.soit un numéro de compta.

    Est-ce possible d'effectuer cette requete??

    Merci d'avance,
    Julien
    0
  8. Kicyfroth
     
    Où sont tes NoCompta et tes Noresp ? Si tu peux, donne moi quelques enregistrements de chaque table car là je comprend pas trop la structure de ta base.

    Il m'embète un peu ton problème c'est pas évident...
    Essaye une requête imbriquée avec en select un truc du genre :

    SELECT Noimme,Nomimme,MONTH(i.Datfinex) as MoisArrete, Nomper as resp, Nomper as compta
    tu devrai pouvoir ensuite restreindre resp et compta à ce que tu veux
    et il faut que tu laisses le group by

    Sinon tu peux toujours changer la structure de ta base pour te simplifier la vie... ^^
    0
  9. julien37
     
    En fait mes Nocompta et Noresp je ne veux plus les voir apparaitre car ce sont des numéros et moi je veux le nom qui correspondent à ces numéros, sachant qu'un immeuble possède un responsable et un comptable.

    Je ne vois pas ce que tu veux me dire avec ta requete? Et je ne sais pas non plus comment faire pour simplifier la table? As tu des idées?

    En tout cas je te remercie déjà de t'interesser à mon problème et de me proposer des solutions...
    0
  10. julien37
     
    C'est bon j'ai trouvé en fait.

    J'ai renommé la table personnalité de 2 façon différente, ce qui m'a permis de faire 2 fois la même condition mais sql le voit de façon différente.

    Merci pour tout, c'est grâce à toi que j'ai trouvé, tu m'as bien aiguillé...
    0
  11. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    Bonjour
    En joignant 2 fois la table, ça doit faire un truc comme ça :
    SELECT Noimme,Nomimme,MONTH(i.Datfinex) as MoisArrete, resp.Nomper, com.Nomper
    FROM sql_sgti.immeuble i, sql_sgti.personnalite comp, sql_sgti.personnalite resp
    Where Noresp=resp.Noperso
    and NoCompta=comp.Noperso
    and Nomimme not like '%*%'
    group by Noimme
    order by MoisArrete,Nomper,Noimme
    bonne journée
    0
  12. Kicyfroth
     
    Excellent bravo ! Tu as laissé le group by ou il est plus utile ?
    Je veux bien voir ta requête finale du coup ^^
    0
  13. tompols Messages postés 1273 Date d'inscription   Statut Contributeur Dernière intervention   460
     
    Re,
    Autant pour moi, j'ai fait ça "à la volée", le group by n'est plus utile.....
    SELECT Noimme,Nomimme,MONTH(i.Datfinex) as MoisArrete, resp.Nomper, com.Nomper
    FROM sql_sgti.immeuble i, sql_sgti.personnalite comp, sql_sgti.personnalite resp
    Where Noresp=resp.Noperso
    and NoCompta=comp.Noperso
    and Nomimme not like '%*%'
    order by MoisArrete,Nomper,Noimme
    0
  14. Kicyfroth
     
    Parfait c'était si simple ^^ merci ça m'a appris un truc ;)
    0