Générer une table de requête (Gestion des données)

Récapitulatif

Cet outil applique une requête SQL à une base de données, et présente les résultats dans une couche ou une vue tabulaire. Vous pouvez utiliser une requête pour joindre plusieurs tables ou renvoyer un sous-ensemble de colonnes ou de lignes à partir des données d'origine dans la base de données.

Cet outil accepte les données d'une géodatabase ArcSDE, d'une géodatabase fichier, d'une géodatabase personnelle ou d'une connexion OLE DB.

Utilisation

Syntaxe

MakeQueryTable_management (in_table, out_table, in_key_field_option, {in_key_field}, {in_field}, {where_clause})
ParamètreExplicationType de données
in_table
[in_table,...]

Nom de la ou des tables à utiliser dans la requête. Si plusieurs tables sont répertoriées, le paramètre Expression peut être utilisé pour définir comment les joindre.

La table d'entrée peut provenir d'une géodatabase ArcSDE, d'une géodatabase fichier, d'une géodatabase personnelle ou d'une connexion OLE DB.

Table View; Raster Layer
out_table

Nom de la couche ou de la vue tabulaire qui va être créée par l'outil.

Table View;Raster Layer
in_key_field_option

Indique comment un champ ObjectID est généré, le cas échéant, pour la requête. La valeur par défaut est USE_KEY_FIELDS.

  • USE_KEY_FIELDSIndique que les champs sélectionnés dans la liste de champs clés doivent être utilisés pour définir la colonne ObjectID dynamique. Si aucun champ n'est sélectionné dans la liste des champs de clé, l'option ADD_VIRTUAL_KEY_FIELD est appliquée automatiquement.
  • ADD_VIRTUAL_KEY_FIELDIndique qu'aucun champ de clé n'a été sélectionné, mais qu'une colonne ObjectID dynamique doit être générée. Pour cela, vous devez copier les données dans un espace de travail local, géré par le système, et ajouter un champ contenant des valeurs uniques à la copie. La couche ou la vue tabulaire accède alors à la copie et utilise le champ ajouté comme champ de clé.
  • NO_KEY_FIELDIndique qu'aucune colonne ObjectID dynamique ne doit être générée. Si vous activez cette option, les sélections ne sont pas prises en charge pour la vue tabulaire. Si une colonne de ObjectID existe déjà dans la liste des champs, elle est utilisée comme ObjectID, même si cette option est choisie.
String
in_key_field
[in_key_field,...]
(Facultatif)

Spécifie un champ ou une combinaison de champs qu'il est possible d'utiliser pour identifier de manière unique une ligne dans la requête. Ce paramètre est utilisé uniquement lorsque l'option USE_KEY_FIELDS est sélectionnée.

Le bouton Ajouter un champ, qui est utilisé uniquement dans ModelBuilder, vous permet d'ajouter des champs attendus afin que vous puissiez remplir la boîte de dialogue et poursuivre la création du modèle.

Field
in_field
[[Field, {Alias}],...,...]
(Facultatif)

Champs à inclure dans la couche ou la vue tabulaire. Si un alias est défini pour un champ, ceci correspond au nom qui s'affiche. Si aucun champ n'est spécifié, tous les champs de toutes les tables sont inclus.

Value Table
where_clause
(Facultatif)

Expression SQL permettant de sélectionner un sous-ensemble d'enregistrements. La syntaxe de l'expression diffère légèrement en fonction de la source des données. Par exemple, lorsque vous interrogez des géodatabases fichier ou ArcSDE, des fichiers de formes, des couvertures, ou des tables dBase ou INFO, placez le nom des champs entre guillemets doubles :

"MY_FIELD"

Si vous interrogez des géodatabases personnelles, placez les champs entre crochets :

[MON_CHAMP]

Dans Python, les chaînes se trouvent entre guillemets simples ou doubles. Pour créer une chaîne contenant des guillemets (comme c'est souvent le cas pour les clauses WHERE dans les expressions SQL), vous pouvez désactiver les guillemets (à l'aide d'une barre oblique inverse) ou placer la chaîne entre guillemets triples. Par exemple, si la clause WHERE souhaitée est

"CITY_NAME" = 'Chicago'

vous pouvez mettre la chaîne entière entre guillemets doubles, puis désactiver les guillemets doubles intérieurs de la manière suivante :

" \"CITY_NAME\" = 'Chicago' "

Ou vous pouvez mettre la chaîne entière entre guillemets simples, puis désactiver les guillemets simples intérieurs de la manière suivante :

' "CITY_NAME" = \'Chicago\' '

Ou vous pouvez mettre la chaîne entière entre guillemets triples sans désactiver les guillemets :

""" "CITY_NAME" = 'Chicago' """

Pour en savoir plus sur la syntaxe SQL et sur ses différences selon les sources de données, reportez-vous à la rubrique d'aide Référence SQL pour les expressions de requête utilisées dans ArcGIS.

SQL Expression

Exemple de code

Exemple d'utilisation de l'outil MakeQueryTable (fenêtre Python)

Le script de fenêtre Python suivant illustre l'utilisation de l'outil MakeQueryTable en mode immédiat.

import arcpy
from arcpy import env
env.workspace = "C:/data/data.gdb"
arcpy.MakeQueryTable_management (["Counties","codemog"], "queryout","ADD_VIRTUAL_KEY_FIELD", "",
                   [["Counties.OBJECTID", 'ObjectID'],["Counties.NAME", 'Name'],
                    ["codemog.Males", 'Males'], ["codemog.Females", 'Females']],
                   "Counties.FIPS = codemog.Fips and Counties.STATE_NAME = 'California'")
Exemple 2 d'utilisation de l'outil MakeQueryTable (script autonome)

Le script suivant est un exemple de l'utilisation de l'outil MakeQueryTable dans l'environnement de création de scripts Python.

# MakeQueryTableOLEDB.py
# Description: Create a query table from two OLE DB tables using a limited set of
#               fields and establishing an equal join.
# Author: ESRI
 
# Import system modules
import arcpy
 
try:
    # Local variables...
    tableList = ["Database Connections/balrog.odc/vtest.COUNTIES",\
                 "Database Connections/balrog.odc/vtest.CODEMOG"]
    
    fieldList = [["vtest.COUNTIES.OBJECTID", 'ObjectID'],["vtest.COUNTIES.NAME", 'Name']\
                 ["vtest.CODEMOG.Males", 'Males'],["vtest.CODEMOG.Females", 'Females']]
    whereClause = "vtest.COUNTIES.FIPS = vtest.CODEMOG.Fips" +\
                  "and vtest.COUNTIES.STATE_NAME = 'California'"
    keyField = "vtest.COUNTIES.OBJECTID"
    lyrName = "CountyCombined"
    # Make Query Table...
    arcpy.MakeQueryTable_management(tableList, lyrName,"USE_KEY_FIELDS", keyField, fieldList, whereClause)
 
    # Print the total rows
    print arcpy.GetCount_management(lyrName)
 
    # Print the fields
    Fields = arcpy.ListFields(lyrName)
    for field in Fields:
        print Field.name
        
 
    # Save as a dBASE file
    arcpy.CopyRows_management(lyrName, "C:/temp/calinfo.dbf")
 
except Exception, e:
    # If an error occurred, print line number and error message
    import traceback, sys
    tb = sys.exc_info()[2]
    print "Line %i" % tb.tb_lineno
    print e.message

Environnements

Thèmes connexes

9/12/2013