Ancestrologie - Plugins et Outils > BOA
Recherche d'un descendant avec un évènement sur un lieu bien précis
Roblim:
Bonsoir,
Je me suis posé la question de savoir si, il y a une requête possible qui me permettrait de saisir un nom-prénom et d'avoir ses descendants qui auraient un évènement concernant un lieu qui s'appelle "La Calle"?
D'avance merci
jfd:
Bonjour Roblim
J'ai essayé mais je n'ai pas réussi à faire une seule requête ! J'ai encore beaucoup de choses à apprendre.
Cependant pour vous aider voici trois requêtes :
La première donne les individus qui ont un évènement individuel dont le lieu est "La Calle" (avec cet orthographe). Du coup plusieurs lignes pour le même individu si plusieurs évèvement comportant ce lieu
SELECT
INDIVIDU.CLE_FICHE AS NIP,
INDIVIDU.NOM AS "Nom",
INDIVIDU.PRENOM AS "Prénom",
INDIVIDU.ANNEE_NAISSANCE AS "Année Naissance",
INDIVIDU.ANNEE_DECES AS "Année décès",
EVENEMENTS_IND.EV_IND_ADRESSE AS "Lieu"
FROM
INDIVIDU
INNER JOIN EVENEMENTS_IND ON (INDIVIDU.KLE_DOSSIER = EVENEMENTS_IND.EV_IND_KLE_DOSSIER)
AND (INDIVIDU.CLE_FICHE = EVENEMENTS_IND.EV_IND_KLE_FICHE)
WHERE
(INDIVIDU.KLE_DOSSIER = 6) AND
(EVENEMENTS_IND.EV_IND_ADRESSE = 'La Calle')
ORDER BY
INDIVIDU.NOM
La deuxième donne la liste des individus de sexe masculin qui ont un évènement familiale sur ce lieu :
SELECT
INDIVIDU.CLE_FICHE as "NIP",
INDIVIDU.NOM AS "Nom",
INDIVIDU.PRENOM AS "Prénom",
EVENEMENTS_FAM.EV_FAM_ADRESSE AS "Lieu",
INDIVIDU.ANNEE_NAISSANCE AS "Année naissance",
INDIVIDU.ANNEE_DECES AS "année décès"
FROM
T_UNION
INNER JOIN INDIVIDU ON (T_UNION.UNION_MARI = INDIVIDU.CLE_FICHE)
INNER JOIN EVENEMENTS_FAM ON (INDIVIDU.KLE_DOSSIER = EVENEMENTS_FAM.EV_FAM_KLE_DOSSIER)
AND (T_UNION.UNION_CLEF = EVENEMENTS_FAM.EV_FAM_KLE_FAMILLE)
WHERE
(INDIVIDU.KLE_DOSSIER = 6) AND
(EVENEMENTS_FAM.EV_FAM_ADRESSE = 'La Calle')
ORDER BY
INDIVIDU.NOM
Et la troisième idem la seconde mais pour les femmes
SELECT
INDIVIDU.CLE_FICHE AS "NIP",
INDIVIDU.NOM as "Nom",
INDIVIDU.PRENOM AS "Prénom",
EVENEMENTS_FAM.EV_FAM_ADRESSE AS "Lieu",
INDIVIDU.ANNEE_NAISSANCE AS "Année Naissance",
INDIVIDU.ANNEE_DECES AS "Année Décès"
FROM
INDIVIDU
INNER JOIN EVENEMENTS_FAM ON (INDIVIDU.KLE_DOSSIER = EVENEMENTS_FAM.EV_FAM_KLE_DOSSIER)
INNER JOIN T_UNION ON (EVENEMENTS_FAM.EV_FAM_KLE_FAMILLE = T_UNION.UNION_CLEF)
AND (INDIVIDU.CLE_FICHE = T_UNION.UNION_FEMME)
WHERE
(INDIVIDU.KLE_DOSSIER = 6) AND
(EVENEMENTS_FAM.EV_FAM_ADRESSE = 'La Calle')
ORDER BY
INDIVIDU.NOM
Les pro auraient fait cela avec une seule requête !!!
En espérant que cela puisse vous aider (pensez à modifier le numéro de dossier)
Cordialement
DDdeBerdeux:
Bonjour,
Pour ceux qui aiment apprendre:
--- Code: ---select d.TQ_CLE_FICHE
,i.NOM
,i.PRENOM
,i.ANNEE_NAISSANCE
,i.ANNEE_DECES
from PROC_TQ_DESCENDANCE(MonNip,10,0,0) d
inner join INDIVIDU i on i.CLE_FICHE=d.TQ_CLE_FICHE
where exists(select * from EVENEMENTS_IND e
where e.EV_IND_KLE_FICHE=d.TQ_CLE_FICHE
and e.EV_IND_VILLE='La Calle')
or exists(select * from EVENEMENTS_FAM f
inner join T_UNION u on u.UNION_CLEF=f.EV_FAM_KLE_FAMILLE
and d.TQ_CLE_FICHE in(u.UNION_MARI,u.UNION_FEMME)
where f.EV_FAM_VILLE='La Calle')
--- Fin du code ---
Je suppose que "La Calle" est le nom de la ville. Avant d'exécuter la requête, remplacez MonNip par le NIP de l'ancêtre dont vous cherchez les descendants. (Le NIP sans le nombre et le signe moins qui le précèdent).
Le nom et le prénom de l'ancêtre ne suffisent pas pour l'identifier de façon unique. C'est pourquoi j'utilise la partie du NIP=CLE_FICHE de la table INDIVIDU.
Conformément à la demande de Roblim, cette requête identifie les descendants qui ont eu au moins un événement individuel ou familial à La Calle, mais pas les événements eux-mêmes.
André
Roblim:
Bonsoir André,
Merci de ta réponse.
J'ai passé la requête, cependant elle n'aboutit pas.
Voici l'erreur qui m'est renvoyée en joint.
DDdeBerdeux:
Sans doute un problème de copie, la requête ne provoque pas d'erreur ici.
La ligne 9 c'est " where e.EV_IND_KLE_FICHE=d.TQ_CLE_FICHE". Tout se passe comme si un caractère avait été ajouté en début de cette ligne.
D'ailleurs, au début de la dernière ligne de votre message d'erreur, il y a un comme un point...
Si vous voulez en même temps que les individus, lister les événements concernés voici une autre requête.
--- Code: ---select s.NIP
,i.NOM
,i.PRENOM
,i.ANNEE_NAISSANCE
,i.ANNEE_DECES
,s.evenement as "Événement"
,s.dateev as "Date événement"
from (select d.TQ_CLE_FICHE as NIP
,case e.EV_IND_TYPE when 'EVEN' then coalesce(e.EV_IND_TITRE_EVENT,r.REF_EVE_LIB_LONG)
else r.REF_EVE_LIB_LONG end as evenement
,e.EV_IND_DATE as dateev
,e.EV_IND_DATE_YEAR as annee
from PROC_TQ_DESCENDANCE(MonNip,10,0,0) d
inner join EVENEMENTS_IND e on e.EV_IND_KLE_FICHE=d.TQ_CLE_FICHE
and e.EV_IND_VILLE='La Calle'
inner join REF_EVENEMENTS r on r.REF_EVE_LIB_COURT=e.EV_IND_TYPE
union
select d.TQ_CLE_FICHE
,case e.EV_FAM_TYPE when 'EVEN' then coalesce(e.EV_FAM_TITRE_EVENT,r.REF_EVE_LIB_LONG)
else r.REF_EVE_LIB_LONG end
,e.EV_FAM_DATE
,e.EV_FAM_DATE_YEAR
from PROC_TQ_DESCENDANCE(MonNip,10,0,0) d
inner join T_UNION u on d.TQ_CLE_FICHE in(u.UNION_MARI,u.UNION_FEMME)
inner join EVENEMENTS_FAM e on e.EV_FAM_KLE_FAMILLE=u.UNION_CLEF
and e.EV_FAM_VILLE='La Calle'
inner join REF_EVENEMENTS r on r.REF_EVE_LIB_COURT=e.EV_FAM_TYPE) s
inner join INDIVIDU i on i.CLE_FICHE=s.NIP
order by 1,2,3,s.annee
--- Fin du code ---
Là aussi il faut remplacer MonNip 2 fois.
André
Navigation
[#] Page suivante
Utiliser la version classique