IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Créer un nouveau champ à partir de la comparaison de plusieurs lignes d'une même table


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Créer un nouveau champ à partir de la comparaison de plusieurs lignes d'une même table
    Bonjour à tous,

    Je suis nouveau sur le Forum et novice dans l'utilisation du sql.
    Je vous expose donc mon problème:

    J'ai une table avec plusieurs champs comportant des données liées au cadastre. Parmi ces champs je souhaite travailler avec : "commune", " section", "numéro " "sous numéro", "Nom", "Prenom" "surface"
    mon objectif est d'arriver à créer un nouveau champ qui contiendrait la surface totale d'une parcelle pour le même propriétaire sachant que pour une parcelle. Cela représenterai la somme des surfaces pour lesquelles les champs commune, section, numéro et prénom sont identique mais pour lesquelles le champ sous numéro est différent.
    Cela reviendrai à additionner la surface des lignes pour lesquelles seul le sous numéro (de chaque parcelle) change.
    j'ai regardé plusieurs discussion dans ce forum mais je n'ai pas réussi à trouver ma solution je me doute qu'il doit y avoir une fonction OVERLAPS dans le script mais je n'arrive vraiment pas à écrire un script qui soit correct.
    Merci d'avance pour votre aide

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 788
    Points
    30 788
    Par défaut
    Comme tu n'as pas précisé le SGBD que tu utilisais, je suppose qu'il prend en charge les fonction de regroupement analytiques définies dans la norme SQL-2003 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  commune
        ,   section
        ,   numero
        ,   sous_numero
        ,   nom
        ,   prenom
        ,   surface
        ,   SUM(surface) OVER (PARTITION BY commune, section, numero, nom, prenom)  AS  surface_totale
    FROM    matable
    ;
    Ce ne serait pas une bonne idée de créer une colonne pour enregistrer cette valeur. En effet, elle est susceptible de varier dès qu'une parcelle change de propriétaire. Il vaudrait mieux créer une vue pour y conserver l'expression de calcul et avoir un résultat toujours à jour.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    merci pour votre réponse.
    j'utilise Qspatiale Lite pour pouvoir redéfinir une couche sur Qgis,
    Il est vrai que avoir la colonne ne me permettra pas d'être à jour tout le temps mais cela me permettra de connaitre la surface totale par propriétaire lorsque je projette ma couche sur Qgis.
    Merci beaucoup pour votre aide.

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    j'ai essayé votre script mais apparemment mon SGBD ne prend pas en compte "PARTITION"; est ce que je peux le remplacer par quelque chose d'autre ?
    Merci encore

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 788
    Points
    30 788
    Par défaut
    Voici deux autres manières d'obtenir ce résultat, avec une jointure sur une table dérivée ou avec une requête scalaire corélée.
    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
    SELECT  tbl.commune
        ,   tbl.section
        ,   tbl.numero
        ,   tbl.sous_numero
        ,   tbl.nom
        ,   tbl.prenom
        ,   tbl.surface
        ,   tot.surface_totale
    FROM    matable tbl
        INNER JOIN
            (   SELECT  commune
                    ,   section
                    ,   numero
                    ,   nom
                    ,   prenom
                    ,   SUM(surface)    AS  surface_totale
                FROM    matable
                GROUP BY commune
                    ,   section
                    ,   numero
                    ,   nom
                    ,   prenom
            )   tot
            ON  tot.commune = tbl.commune
            AND tot.section = tbl.section
            AND tot.numero  = tbl.numero 
            AND tot.nom     = tbl.nom    
            AND tot.prenom  = tbl.prenom 
    ;
    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
    SELECT  tbl.commune
        ,   tbl.section
        ,   tbl.numero
        ,   tbl.sous_numero
        ,   tbl.nom
        ,   tbl.prenom
        ,   tbl.surface
        ,   (   SELECT  SUM(surface)    AS  surface_totale
                FROM    matable tot
                WHERE   tot.commune = tbl.commune
                    AND tot.section = tbl.section
                    AND tot.numero  = tbl.numero 
                    AND tot.nom     = tbl.nom    
                    AND tot.prenom  = tbl.prenom 
            )   AS  surface_totale
    FROM    matable tbl
    ;
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  6. #6
    Candidat au Club
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Juin 2016
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] modifier le début de deux champs dans plusieurs enregistrements d'une même table
    Par corbin dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/04/2011, 09h40
  2. Comparaison entre lignes d'une même table.
    Par jules700 dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/01/2011, 10h42
  3. Réponses: 8
    Dernier message: 10/10/2006, 10h58
  4. Créer un nouveau "champ" <div id="a"
    Par FMaz dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 29/03/2006, 17h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo