Ancestrologie - Plugins et Outils > BOA

Recherche d'un descendant avec un évènement sur un lieu bien précis

(1/4) > >>

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

[0] Index des messages

[#] Page suivante

Une erreur s'est produite lors du remerciement
Remerciement...
Utiliser la version classique