Seleccione valores distintos de una sola columna de una tabla de atributos (o capa)

16

¿Hay una manera de seleccionar valores distintos de una columna en ArcMap? Tengo los datos en formatos GDB y SHP. He buscado formas de seleccionar usando SQL, QueryLayers, ModelBuilder y cajas de herramientas individuales y aparece como todas las opciones de selección siempre SELECCIONAR * DE tableName DÓNDE ...

En SQL escribiría SELECT DISTINCT columnName FROM tableName.

    
pregunta Steve 27.01.2012 - 16:26

8 respuestas

17

O puede ejecutar la Frecuencia de la herramienta ArcToolBox (Herramientas de análisis > > Estadísticas > > Frecuencia) que generará una tabla con valores únicos y un conteo de la cantidad de veces que aparecen.

O podría escribir un script de Python que obtenga un SearchCursor en un campo y luego construir una lista de todos los valores del formulario

if value not in myList:
    myList.append(value)
    
respondido por el Justin 27.01.2012 - 17:19
12

Use una lista de comprensión de Python.

import arcpy
fldName = 'val_fld'
fcName = 'feature_class.shp'
#set creates a unique value iterator from the value field
myList = set([row.getValue(fldName) for row in arcpy.SearchCursor(fcName)]) 

Para grandes conjuntos de datos, un método eficiente en memoria sería utilizar una expresión del generador .

myList = set((row.getValue(fldName) for row in arcpy.SearchCursor(fcName,fields=fldName))
    
respondido por el tharen 28.01.2012 - 01:49
4

Si sus datos están en formato PGDB, puede hacer lo siguiente dentro de los diálogos del generador de consultas (consulta de definición, selección por atributos, expresiones de la caja de herramientas, etc.) usando una subconsulta:

SELECCIONAR * DE tableName WHERE ...

column_to_test_for_unique_values IN 
(SELECT column_to_test_for_unique_values
FROM table_name
GROUP BY column_to_test_for_unique_values HAVING
Count(column_to_test_for_unique_values)=1)

Esto devolverá los registros para los cuales los valores en column_to_test_for_unique_values son únicos.

    
respondido por el Brent Edwards 27.01.2012 - 17:06
4

Si solo tiene una licencia Básica (anteriormente llamada ArcView), puede abrir la vista de Tabla, hacer clic con el botón derecho en una columna y seleccionar Resumir.

    
respondido por el klewis 29.01.2012 - 01:27
1

Si sus datos están en un SDE (motor de base de datos espacial), se puede usar el objeto ArcSDESQLExecute de python y arcpy. Uno puede pasar sql complejo utilizando este "método".

# set up executor for sql
executor = arcpy.ArcSDESQLExecute(sde_connection_sql)

# sql statements
select_max = """select max(LOAD_ID) from SDE.FEATURE_CLASS"""

# get load id
result_max_id = executor.execute(select_max)
    
respondido por el fallingdog 13.09.2016 - 22:20
0

O use su script de Python para exportar a CSV y luego use la API de Python de otra base de datos (por ejemplo, SpatiaLite) para leer el csv y hacer una consulta SQL adecuada desde el mismo script. Para una mesa grande, este podría ser un poco más rápido que crear su propio creador de listas - dunno.

Sin embargo, lo haces, esta es una "característica" realmente molesta de ArcGIS.

    
respondido por el MappaGnosis 27.01.2012 - 17:41
0

¿Qué pasa con el uso de distinct en una subconsulta (la siguiente es una clase de FGDB):

"STATE_NAME" = (select distinct "STATE_NAME" from EsriUsaCountiesDetailed)

Nota de la help (10.0) que esto tiene limitaciones:

  

Coberturas, shapefiles y otros datos no basados en archivos de la base de datos   las fuentes no admiten subconsultas.

    
respondido por el Chad Cooper 27.01.2012 - 19:10
0

Como Justin sugiere. Normalmente hago un resumen en el campo que quiero, luego hago una selección distinta en el dbf, ejecute un pequeño cálculo para categorizar cada valor distinto y luego vuelva a unirlo al original.
Es el camino más largo, y tiene que fenagelear con sus métodos de cálculo favoritos. pero ...
Lo que sea que haga el trabajo.

    
respondido por el Brad Nesom 27.01.2012 - 19:32

Lea otras preguntas en las etiquetas