Bonjour à tous,
J'ai une petite requête qui m'ennuie, encore une fois.
J'ai essayé de cherché sur le forum, mais je n'ai rien trouvé, pourtant le sujet a déjà du être abordé.
Il s'agit d'une requête anniversaire.
J'ai une table agents avec des personnes dedans et leur date d'anniversaire. Le but étant de montré ceux qui sont naît le même jour et même moi.
Bien sûr, on évite de montré que A et naît le même jour que lui même ^^.
L'autre subtilité, c'est qu'il faut évité les doublons dans la réponse.
Par exemple si A et naît comme B
On doit voir dans la requête
A - B
mais pas B -A.
J'ai trouvé une solution (enfin, disons que l'on me l'a grandement suggéré) mais j'en cherche une autre un peu moins complexe que ce que l'on m'a montré (bah ouais c'est pas un truc super compliqué pourtant :o).
Voilà sur quoi je travail actuellement, j'aimerais, plutôt que l'on me dise la réponse, que les personnes connaissant la réponse m'orientent sur celle-ci !
Voilà mon idée
Imaginons donc que nous avons une ligne avec A - B
je voulais rajouter deux colonnes, col1 avec A||B, col2 avec B||A.
Ainsi, si l'on regarde col1 et la première ligne et col2 de la deuxième, ce sont les mêmes, et donc peut être que l'on tien une piste pour montrer à SQL qu'il faut les éliminer...
Malheureusement, c'est dans la suite que ça bloque, je ne vois pas dans quelle mesure je peux signaler qu'Oracle doit analyser ma table pour chercher à l'intérieur de la table les lignes où les ces deux colonnes sont égales et n'en garder qu'une sur les deux...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 select view1.name1,view1.birth_date,view2.name2, name1||name2 col1, name2||name1 inversion from ( (select last_name || ' ' || first_name name1, birth_date from agents) view1 inner join (select last_name || ' ' || first_name name2, birth_date from agents) view2 on to_char(view1.birth_date,'dd/mm')=to_char(view2.birth_date,'dd/mm') and name1<>name2 )
PS : ma réponse un peu bizarre
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
31
32
33
34
35
36
37 SELECT ag1, ag2 FROM ( SELECT ag1, ag2 FROM ( SELECT ag1, ag2, rownum counter FROM ( SELECT a1.first_name||' '||a1.last_name ag1, a2.first_name||' '||a2.last_name ag2, (a1.agent_id*a2.agent_id)+ (a1.agent_id+a2.agent_id) magic_id FROM agents a1 INNER JOIN agents a2 ON to_char(a1.birth_date,'DD-MON') = to_char(a2.birth_date,'DD-MON') WHERE a1.agent_id <> a2.agent_id ORDER BY magic_id ) sub1 ) sub2 WHERE MOD(counter,2)=1 ) sub3 ORDER BY ag1
Partager