pb requete. probablement group by
Bonjour,
je n'arrive pas à faire une requête donc je fais appel à vous. Je pense que ça doit avoir un rapport avec le group by.
Imaginons un tableau avec des données.
Mon tableau a 4 colonnes
- nom chef
- nom autre
- date principale
- date secondaire
Pour 1 nom chef, il y a toujours 4 noms autres, donc 4 lignes dans le tableau, pour un seul nom chef.
Ma requete doit récupérer la liste des noms chefs où date principal n'est pas nulle ou bien date secondaire n'est pas nulle, triée par date principale puis par date secondaire.
voici à quoi ressemble le tableau:
Code:
1 2 3 4 5 6 7 8 9 10
|
nom chef | nom autre | date principale | date secondaire
A|1|d1p|d1s
A|2|d2p|d2s
A|3|d3p|d3s
A|4|d4p|d4s
B|5|d5p|d5s
B|6|d6p|d6s
B|7|d6p|d6s
B|8|d6p|d6s |
Voici la requete que j'avais faite:
Code:
1 2 3 4 5
|
SELECT [nom chef], [date_principale], [date_secondaire]
FROM matable
WHERE ([date_principale] Is Not Null Or [date_secondaire] Is Not Null)
ORDER BY [date_principale], [date_secondaire]; |
Le probleme c'est que je récupère plusieurs fois un meme nom chef, si les dates sont non nulles pour au moins 2 de ces noms autres:
c'est a dire que si 4 noms autres correspondant au meme nom chef ont tous les 4 des dates non nulles, alors je récupère 4 fois le nom du chef.
Mais comme c'est trié par date, dans la liste, je vais avoir un nom chef répété 4 fois mais à plusieurs lignes d'intervalle, car entre les 4 memes noms chefs, il y aura d'autres noms chefs à cause des dates triées.
Donc comment faire pour avoir une liste avec les memes noms chefs regroupés ensemble et pour chacun d'eux, les dates triées dans l'ordre ?
J'ai essayé un truc avec group by nom (order by nom, date principale, date secondaire group by nom) mais ça me met syntax error. Je crois que c'est parce qu'il faut dans la requete une fonction d'agregation comme le count, mais je n'ai rien à compter...
voilà merci de votre aide
Re: pb requete. probablement group by
Essaye :
Code:
1 2 3 4 5
| SELECT a.[nom chef], a.[date_principale], a.[date_secondaire]
FROM maTable a INNER JOIN maTable b ON a.[nom chef] = b.[nom chef]
WHERE (a.[date_principale] Is Not Null Or [a.date_secondaire] Is Not Null)
GROUP BY a.[nom chef], a.[nom autre], a.[date_principale], a.[date_secondaire]
ORDER BY MIN(b.[date_principale]), MIN(b.[date_secondaire]), a.[date_principale]), a.[date_secondaire]; |
Eventuellement tu auras à faire des adaptations, la syntaxe ACCESS : :twisted: