Answers:
或者,您可以运行ArcToolBox工具“频率”(Analysis Tools >> Statistics >> Frequency),该工具将输出一个具有唯一值的表格以及它们出现的次数。
或者,您可以编写在字段上获取SearchCursor的python脚本,然后构建表单所有值的列表
if value not in myList:
myList.append(value)
使用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)])
对于大型数据集,一种内存有效的方法是使用生成器表达式。
myList = set((row.getValue(fldName) for row in arcpy.SearchCursor(fcName,fields=fldName))
fields
参数,例如myList = set([row.getValue(fldName) for row in arcpy.SearchCursor(fcName, fields=fldName)])
如果您的数据是PGDB格式,则可以使用子查询在查询构建器对话框(定义查询,按属性选择,工具箱表达式等)中执行以下操作:
SELECT * FROM tableName在哪里...
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)
这将返回column_to_test_for_unique_values中的值唯一的记录。
如果您的数据在SDE(空间数据库引擎)中,则可以使用python和arcpy的ArcSDESQLExecute对象。可以使用此“方法”传递复杂的sql。
# 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)
或者使用您的Python脚本导出到CSV,然后使用另一个数据库的Python API(例如SpatiaLite)读取csv,并在同一脚本中对其进行适当的SQL查询。对于大型表,这可能比滚动您自己的列表构建器-dunno快一点。
无论您做什么,这仍然是ArcGIS的一个令人讨厌的“功能”。
distinct
在子查询中使用a怎么样(以下是FGDB要素类):
"STATE_NAME" = (select distinct "STATE_NAME" from EsriUsaCountiesDetailed)
从帮助(10.0)中注意,这确实有局限性:
Coverage,shapefile和其他基于非地理数据库文件的数据源不支持子查询。