banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Thu 28 October 2010 16:41

Pierre
DesCartesPourUnMondeMeilleur
Date d'inscription: 22 Sep 2005
Messages: 1643

ORACLE/SQL : création d'une vue des parcelles bâties avec adresse

Aloha,

Voilà mon besoin, je souhaite rapatrier de mes tables MJ2_BATI les adresses des bâtiments des parcelles bâties. Seulement, dans le cas d'une parcelle ayant X bâtiments, je peux avoir au maximum X adresses. Ce qui ce traduit par X lignes pour la même parcelle dans ma vue.

Quelqu'un a-t'il une idée pour retrouver par parcelle un champ regroupant les différentes adresses ? J'ai bien pensé à un curseur (CURSOR), mais cela ne fonctionne pas pour définir une vue.

ex :

Code:

SELECT GEOMETRY,
       PCI_PARC.IDENT,
       P.CCOCOM,
       P."Section cadastrale",
       P."Numéro de parcelle",
       P."surface parcelle m²",
       P."Adresse"
  FROM    PCI_PARC
       INNER JOIN
          (SELECT                                                  /*ORDERED*/
                 MJ2_PARCEL.CCOCOM,
                  MJ2_PARCEL.CCOSEC AS "Section cadastrale",
                  MJ2_PARCEL.DNUPLA AS "Numéro de parcelle",
                  MJ2_PARCEL.SURFACE AS "surface parcelle m²",
                     TRIM (LEADING 0 FROM MJ2_BATI.DNVOIRI)
                  || ', '
                  || MJ2_BATI.DVOILIB
                     AS "Adresse"
             FROM    MJ2_PARCEL
                  INNER JOIN
                     MJ2_BATI
                  ON     (MJ2_BATI.CCOCOM = MJ2_PARCEL.CCOCOM)
                     AND (MJ2_BATI.CCOSEC = MJ2_PARCEL.CCOSEC)
                     AND (MJ2_BATI.DNUPLA = MJ2_PARCEL.DNUPLA)
            WHERE 
                  MJ2_PARCEL.GPARBAT = '1'
           GROUP BY MJ2_PARCEL.CCOCOM,
                    MJ2_PARCEL.CCOSEC,
                    MJ2_PARCEL.DNUPLA,
                    MJ2_PARCEL.SURFACE,
                       TRIM (LEADING 0 FROM MJ2_BATI.DNVOIRI)
                    || ', '
                    || MJ2_BATI.DVOILIB) P
       ON     (SUBSTR (PCI_PARC.IDENT, 0, 3) = P.CCOCOM)
          AND (SUBSTR (PCI_PARC.IDENT, 7, 2) = P."Section cadastrale")
          AND (SUBSTR (PCI_PARC.IDENT, 9, 4) = P."Numéro de parcelle")

me renvoie pour la parcelle CO 0001, 2 adresses différentes.

art X I. Déclaration des Droits de l’Homme et du Citoyen 1789
La libre communication des pensées et des opinions est un des droits les plus précieux de l’Homme : tout Citoyen peut donc parler, écrire, imprimer librement, sauf à répondre de l’abus de cette liberté, dans les cas déterminés par la Loi.

Hors ligne

 

#2 Fri 29 October 2010 11:53

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1549

Re: ORACLE/SQL : création d'une vue des parcelles bâties avec adresse

Pierre a écrit:

Aloha,

Voilà mon besoin, je souhaite rapatrier de mes tables MJ2_BATI les adresses des bâtiments des parcelles bâties. Seulement, dans le cas d'une parcelle ayant X bâtiments, je peux avoir au maximum X adresses. Ce qui ce traduit par X lignes pour la même parcelle dans ma vue.

Quelqu'un a-t'il une idée pour retrouver par parcelle un champ regroupant les différentes adresses ? J'ai bien pensé à un curseur (CURSOR), mais cela ne fonctionne pas pour définir une vue.

ex :

Code:

SELECT GEOMETRY,
       PCI_PARC.IDENT,
       P.CCOCOM,
       P."Section cadastrale",
       P."Numéro de parcelle",
       P."surface parcelle m²",
       P."Adresse"
  FROM    PCI_PARC
       INNER JOIN
          (SELECT                                                  /*ORDERED*/
                 MJ2_PARCEL.CCOCOM,
                  MJ2_PARCEL.CCOSEC AS "Section cadastrale",
                  MJ2_PARCEL.DNUPLA AS "Numéro de parcelle",
                  MJ2_PARCEL.SURFACE AS "surface parcelle m²",
                     TRIM (LEADING 0 FROM MJ2_BATI.DNVOIRI)
                  || ', '
                  || MJ2_BATI.DVOILIB
                     AS "Adresse"
             FROM    MJ2_PARCEL
                  INNER JOIN
                     MJ2_BATI
                  ON     (MJ2_BATI.CCOCOM = MJ2_PARCEL.CCOCOM)
                     AND (MJ2_BATI.CCOSEC = MJ2_PARCEL.CCOSEC)
                     AND (MJ2_BATI.DNUPLA = MJ2_PARCEL.DNUPLA)
            WHERE 
                  MJ2_PARCEL.GPARBAT = '1'
           GROUP BY MJ2_PARCEL.CCOCOM,
                    MJ2_PARCEL.CCOSEC,
                    MJ2_PARCEL.DNUPLA,
                    MJ2_PARCEL.SURFACE,
                       TRIM (LEADING 0 FROM MJ2_BATI.DNVOIRI)
                    || ', '
                    || MJ2_BATI.DVOILIB) P
       ON     (SUBSTR (PCI_PARC.IDENT, 0, 3) = P.CCOCOM)
          AND (SUBSTR (PCI_PARC.IDENT, 7, 2) = P."Section cadastrale")
          AND (SUBSTR (PCI_PARC.IDENT, 9, 4) = P."Numéro de parcelle")

me renvoie pour la parcelle CO 0001, 2 adresses différentes.


Bonjour,

Passer par un fonction agrégée, type SUM(varchar), qui regrouperait dans un record plusieurs valeurs ?
(tres rapidement, une recherche gougle donne: http://www.oracle-base.com/articles/mis … iques.php)

Nous utilisons un mecanisme similaire avec PG, pour afficher des rapports ou une colonne excel contient des valeurs concaténées (toutes les communes rattachées a un site d'observation, par ex)

Nicolas

Hors ligne

 

Pied de page des forums

Powered by FluxBB