在文件地理数据库中使用 SQL 进行报告和分析 (转)
================以下摘自ArcGIS10.1帮助===================
文件地理数据库允许在 QueryDef 中通过 SubFields(字段列表)方法使用表达式和别名完善分析和报告。此外,通过 PostFixClause 支持 ORDER BY 和 GROUP BY。在支持 GROUP BY 时,表达式包括聚合函数,如 MIN、MAX 和 SUM。
ALIAS
提供给列另外一个名称以提供更易于理解的输出。
SQL
SELECT NAME, POP1997 - POP1990 as PopChange
FROM counties ORDER BY NAME
ArcObjects
pQueryDef.SubFields = "NAME, POP1997 - POP1990 as PopChange"
pQueryDef.Tables = "counties"
pQueryDef.PostfixClause = "ORDER BY NAME"
CASE
评估条件列表并返回多个结果表达式之一。
SQL
SELECT name,salary,
CASE
WHEN salary <= 2000 THEN 'low'
WHEN salary > 2000 AND salary <= 3000 THEN 'average'
WHEN salary > 3000 THEN 'high'
END AS salary_level
FROM employees
ORDER BY salary ASC
ArcObjects
pQueryDef.SubFields = "name,salary,
CASE
WHEN salary <= 2000 THEN 'low'
WHEN salary > 2000 AND salary <= 3000 THEN 'average'
WHEN salary > 3000 THEN 'high'
END AS salary_level"
pQueryDef.Tables = " employees"
pQueryDef.PostfixClause = " ORDER BY salary ASC "
COALESCE
返回其参数的第一个非空字段值。
SQL
SELECT Name, COALESCE(Business_Phone, Cell_Phone, Home_Phone)
Contact_Phone
FROM Contact_Info
ArcObjects
queryDef.SubFields = "Name, COALESCE(Business_Phone, Cell_Phone,
Home_Phone) Contact_Phone"
queryDef.Tables = "Contact_Info"
Contact_Info:
| 
 名称  | 
 Business_Phone  | 
 Cell_Phone  | 
 Home_Phone  | 
| 
 Jeff  | 
 531-2531  | 
 622-7813  | 
 565-9901  | 
| 
 Laura  | 
 空值  | 
 772-5588  | 
 312-4088  | 
| 
 Peter  | 
 空值  | 
 空值  | 
 594-7477  | 
结果:
| 
 名称  | 
 Contact_Phone  | 
| 
 Jeff  | 
 531-2531  | 
| 
 Laura  | 
 772-5588  | 
| 
 Peter  | 
 594-7477  | 
表达式
SQL
SELECT SIN(sunangle)
FROM sightings
ArcObjects
queryDef.SubFields = "SIN(sunangle)"
queryDef.Tables = "sightings"
设置函数
| 运算符 | 描述 | 
| 
 AVG  | 
 计算组中所有值的平均值。空值会被忽略。  | 
| 
 COUNT(*),COUNT(表达式)  | 
 COUNT(*) 返回表中的记录数。包括空值。COUNT(表达式)返回指定表达式的值数。空值将被忽略。  | 
| 
 MAX  | 
 查找组中的最大值。空值会被忽略。  | 
| 
 MIN  | 
 查找组中的最小值。空值会被忽略。  | 
| 
 STDDEV, STDDEV_SAMP  | 
 返回表达式的样本标准差。  | 
| 
 STDDEV_POP  | 
 返回表达式的总体标准差。  | 
| 
 SUM  | 
 查找组中的值。空值会被忽略。  | 
| 
 VAR, VAR_SAMP  | 
 返回表达式的样本方差。  | 
| 
 VAR_POP  | 
 返回表达式的总体方差。  | 
算述运算符
算术运算符用于对数值进行加、减、乘、除的运算。
| 运算符 | 描述 | 
| 
 *  | 
 乘法算术运算符  | 
| 
 /  | 
 除法算术运算符  | 
| 
 +  | 
 加法算术运算符  | 
| 
 -  | 
 减法算术运算符  | 
函数
以下是文件地理数据库支持的整个函数列表。
日期函数
| 函数 | 描述 | 
| 
 CURRENT_DATE  | 
 返回当前日期。  | 
| 
 EXTRACT (extract_field FROMextract_source)  | 
 返回 extract_source 的 extract_field 部分。extract_source 参数是一个日期时间表达式。extract_field 参数可以是下列任一关键字:YEAR、MONTH、DAY、HOUR、MINUTE 或 SECOND。  | 
| 
 CURRENT TIME  | 
 返回当前时间。  | 
| 
 CURRENT_TIMESTAMP  | 
 返回当前时间和日期。  | 
字符串函数
以 string_exp 表示的参数可以是列名、字符串文本或者另一个标量函数的结果,其基础数据类型可表示为字符型。
以 character_exp 表示的参数是长度可变的字符型字符串。
以 start 或 length 表示的参数可以是数值文本或者另一个标量函数的结果,其基础数据类型可表示为数值型。
这些字符串函数以 1 为基础;即字符串的第一个字符为字符 1。
| 函数 | 描述 | 
| 
 CHAR_LENGTH(string_exp)  | 
 返回字符串表达式的字符长度。  | 
| 
 CONCAT(string_exp1, string_exp2)  | 
 返回 string_exp2 与 string_exp1 连接后得到的字符串。  | 
| 
 LOWER(string_exp)  | 
 返回一个与 string_exp 相等的字符串,其中所有大写字符均会转换为小写字符。  | 
| 
 POSITION(character_expIN character_exp)  | 
 返回第一个字符表达式在第二个字符表达式中的位置。结果是一个确切的数值,采用预先定义的精度且小数位数为零。  | 
| 
 SUBSTRING (string_expFROM start FOR length)  | 
 返回一个从 string_exp 衍生而来的字符串,其起始字符位置由 start 指定,字符数由 length 指定。  | 
| 
 TRIM(BOTH | LEADING | TRAILING trim_characterFROM string_exp)  | 
 返回字符串的开头、末尾或两端移除trim_character 后所得的 string_exp。  | 
| 
 UPPER(string_exp)  | 
 返回一个与 string_exp 相等的字符串,其中所有小写字符均会转换为大写字符。  | 
数值函数
所有数值函数均返回数值型值。
以 numeric_exp、float_exp 或 integer_exp 表示的参数可以是列名、另一个标量函数的结果或数值文本,其基础数据类型可表示为数值型。
| 函数 | 描述 | 
| 
 ABS(numeric_exp)  | 
 返回 numeric_exp 的绝对值。  | 
| 
 ACOS(float_exp)  | 
 返回作为角度的 float_exp 的反余弦值,用弧度表示。  | 
| 
 ASIN(float_exp)  | 
 返回作为角度的 float_exp 的反正弦值,用弧度表示。  | 
| 
 ATAN(float_exp)  | 
 返回作为角度的 float_exp 的反正切值,用弧度表示。  | 
| 
 CEILING(numeric_exp)  | 
 返回大于或等于 numeric_exp 的最小整数。  | 
| 
 COS(float_exp)  | 
 返回 float_exp 的余弦值,其中 float_exp是以弧度表示的角度。  | 
| 
 FLOOR(numeric_exp)  | 
 返回小于或等于 numeric_exp 的最大整数。  | 
| 
 LOG(float_exp)  | 
 返回 float_exp 的自然对数。  | 
| 
 LOG10(float_exp)  | 
 返回 float_exp 的以 10 为底的对数。  | 
| 
 MOD(integer_exp1, integer_exp2)  | 
 返回 integer_exp1 除以 integer_exp2 所得的余数。  | 
| 
 POWER(numeric_exp, integer_exp)  | 
 返回 numeric_exp 的 integer_exp 次幂的值。  | 
| 
 ROUND(numeric_exp, integer_exp)  | 
 返回四舍五入至小数点右侧第 integer_exp位的 numeric_exp。如果 integer_exp 为负数,则 numeric_exp 将被四舍五入至小数点左侧第 |integer_exp| 位。  | 
| 
 SIGN(numeric_exp)  | 
 返回 numeric_exp 正负号的标志。如果numeric_exp 小于零,则返回 -1。如果numeric_exp 等于零,则返回 0。如果numeric_exp 大于零,则返回 1。  | 
| 
 SIN(float_exp)  | 
 返回 float_exp 的正弦值,其中 float_exp是以弧度表示的角度。  | 
| 
 TAN(float_exp)  | 
 返回 float_exp 的正切值,其中 float_exp是以弧度表示的角度。  | 
| 
 TRUNCATE(numeric_exp, integer_exp)  | 
 返回截断至小数点右侧第 integer_exp 位的numeric_exp。如果 integer_exp 为负数,则 numeric_exp 将被截断至小数点左侧第 |integer_exp| 位。  | 
GROUP BY
用于按一或多列收集多条记录的数据并对结果进行分组
SQL
SELECT STATE_NAME, SUM(POP1990) as TotalPopulation
FROM counties
GROUP BY STATE_NAME ORDER BY STATE_NAME
ArcObjects
pQueryDef.SubFields = "STATE_NAME, SUM(POP1990) as
TotalPopulation"
pQueryDef.Tables = "counties"
pQueryDef.PostfixClause = "GROUP BY STATE_NAME ORDER BY
STATE_NAME"
HAVING
GROUP BY 的子句。
SQL
SELECT department, MAX(salary) as Highest_salary
FROM employees
GROUP BY department HAVING MAX(salary) < 50000
ArcObjects
queryDef.SubFields = "department, MAX(salary) as Highest_salary"
queryDef.Tables = "employees"
pQueryDef.PostfixClause = "GROUP BY department HAVING MAX(salary)
< 50000"
JOINS
合并两个或多个表的记录。
Cross Join
SQL
SELECT Table1.name, Table1.Address, Table2.name, Table2.Salary
FROM Table1 CROSS JOIN Table2
ArcObjects
queryDef.SubFields = "Table1.name, Table1.Address, Table2.name,
Table2.Salary"
queryDef.Tables = "Table1 CROSS JOIN Table2"
Inner Join
SQL
SELECT Table1.C1, Table1.C2, Table2.C3, Table2.C4 FROM Table1
INNER JOIN Table2 ON Table1.C1 = Table2.C3
ArcObjects
queryDef.SubFields = "Table1.C1, Table1.C2, Table2.C3,
Table2.C4"
queryDef.Tables = "Table1 INNER JOIN Table2 ON Table1.C1 =
Table2.C3"
Left Outer Join
SQL
SELECT Table1.C1, Table1.C2, Table2.C3, Table2.C4 FROM Table1
LEFT OUTER JOIN Table2 ON Table1.C1 = Table2.C3
ArcObjects
queryDef.SubFields = "Table1.C1, Table1.C2, Table2.C3,
Table2.C4"
queryDef.Tables = "Table1 LEFT OUTER JOIN Table2 ON Table1.C1 =
Table2.C3"
Right Outer Join
SQL
SELECT * FROM Table1 RIGHT OUTER JOIN Table2 ON Table1.C1 =
Table2.C3
ArcObjects
queryDef.SubFields = "*"
queryDef.Tables = "Table1 RIGHT OUTER JOIN Table2 ON Table1.C1 =
Table2.C3"
NULLIF
如果所提供的两个参数相等,则 NULLIF 返回空值;否则,返回第一个参数的值。
SQL
SELECT Location, NULLIF(Sales, Forecast) as Results FROM
StoreSales
ArcObjects
queryDef.SubFields = " Location, NULLIF(Sales, Forecast) as
Results"
queryDef.Tables = "StoreSales"
StoreSales:
| 位置 | 销售 | 预测 | 
| 
 雷德兰兹  | 
 39000  | 
 55000  | 
| 
 Palm Springs  | 
 60000  | 
 61000  | 
| 
 Riverside  | 
 40000  | 
 40000  | 
结果:
| 位置 | 结果 | 
| 
 雷德兰兹  | 
 39000  | 
| 
 Palm Springs  | 
 60000  | 
| 
 Riverside  | 
 空值  | 
ORDER BY
指定排序顺序。顺序可以是升序 (ASC) 或降序 (DESC),并将两者加以整理。排序规则类型包括 BINARY(BIN)、CASESENSITIVE(CASE) 和 NOCASESENSITIVE(NOCASE)。二进制排序规则区分大小写和重音。区分大小写排序规则区分大写和小写字母。不区分大小写排序规则不区分大写和小写字母。
SQL
SELECT STATE_NAME, POP1990
FROM counties ORDER BY STATE_NAME
ArcObjects
pQueryDef.SubFields = "STATE_NAME, POP1990"
pQueryDef.Tables = "counties"
pQueryDef.PostfixClause = "ORDER BY STATE_NAME"
SQL
SELECT STATE_NAME, POP1990
FROM counties ORDER BY STATE_NAME COLLATE BINARY ASC
ArcObjects
pQueryDef.SubFields = "STATE_NAME, POP1990"
pQueryDef.Tables = "counties"
pQueryDef.PostfixClause = "ORDER BY STATE_NAME COLLATE BINARY
ASC"
在文件地理数据库中使用 SQL 进行报告和分析 (转)的更多相关文章
- (转)arcengine+c# 修改存储在文件地理数据库中的ITable类型的表格中的某一列数据,逐行修改。更新属性表、修改属性表某列的值。
		
作为一只菜鸟,研究了一个上午+一个下午,才把属性表的更新修改搞了出来,记录一下: 我的需求是: 已经在文件地理数据库中存放了一个ITable类型的表(不是要素类FeatureClass),注意不是要素 ...
 - SQL Server 地理数据库中的系统表
		
转自:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#/na/002q00000080000000/ 地理数据库的系统表可以强制 ...
 - C#和Java中执行SQL文件脚本的代码(非常有用)
		
原文:C#和Java中执行SQL文件脚本的代码(非常有用) 我们在做程序的时候有事后会涉及到利用sql文件 直接执行,可是在sql文件中有很多注释,我们要一句一句的执行首先必须的得把sql文件解析 去 ...
 - 文件 "c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\ttt.mdf" 已压缩,但未驻留在只读数据库或文件组中。必须将此文件解压缩。 CREATE DATABASE 失败。无法创建列出的某些文件名。请查看相关错误。 (.Net SqlClient Data Provider)
		
问题: 文件 "c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\ttt.mdf" 已压缩,但 ...
 - 从navicat中导入sql文件过大:Got a packet bigger than 'max_allowed_packet' bytes
		
失败背景:刚才通过navicat向本地mysql数据库中导入sql文件.第一个sql文件(多个表)大小为967M,导入成功: 第二个sql(单个表)大小为50.1M,导入失败. 1.在navicat中 ...
 - 在Centos中导入sql文件的方法
		
在Centos中导入sql文件的方法 利用mysql -u root -p进入mysql数据库 对于文件的导入,在Centos下里面的是首先要新建一个和文件相同名字的数据库.例如:mysql>c ...
 - c#Winform程序调用app.config文件配置数据库连接字符串  SQL Server文章目录   浅谈SQL Server中统计对于查询的影响   有关索引的DMV  SQL Server中的执行引擎入门 【译】表变量和临时表的比较  对于表列数据类型选择的一点思考  SQL Server复制入门(一)----复制简介  操作系统中的进程与线程
		
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
 - C# 读取指定文件夹中的全部文件,并按规则生成SQL语句!
		
本实例的目的在于: 1 了解怎样遍历指定文件夹中的全部文件 2 控制台怎样输入和输出数据 代码: using System; using System.IO; namespace ToSql{ cla ...
 - linux中导入sql文件
		
在linux中导入sql文件的方法分享(使用命令行转移mysql数据库) 因导出sql文件 在你原来的网站服务商处利用phpmyadmin导出数据库为sql文件,这个步骤大家都会,不赘述. 上传sql ...
 
随机推荐
- Co-variant array conversion from x to y may cause run-time exception
			
http://stackoverflow.com/questions/8704332/co-variant-array-conversion-from-x-to-y-may-cause-run-tim ...
 - [HDU 1254] 推箱子
			
推箱子 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
 - 【转】VC中获取文件的相对路径和绝对路径
			
原文网址:http://www.360doc.com/content/13/0703/16/3402399_297386231.shtml
 - struts1.3异常处理机制
			
当Struts的控制器捕获到异常时,在异常处理块中,创建描述异常信息的ActionMessage对象,并放入ActionMessages对象中.然后把ActionMessages对象存放到一定范围内( ...
 - 生产环境下JAVA进程高CPU占用故障排查
			
问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过, ...
 - EventHandlerList z
			
写一个类时,有时候会在同一个类上添加很多事件,事件很多的话,是不容易管理的,.NET提供的EventHandlerList可以辅助多个事件的管 理,但不方便的地方是,它不是类型安全的,缺少类型安全,多 ...
 - SQL Server查询性能优化——堆表、碎片与索引(一)
			
SQL Server在堆表中查询数据时,是不知道到底有多少数据行符合你所指定的查找条件,它将根据指定的查询条件把数据表的全部数据都查找 一遍.如果有可采用的索引,SQL Server只需要在索引层级查 ...
 - LittleTools之输出RenderTexture工具
			
using UnityEngine; using System.Collections; using System.IO; /// <summary> /// Save render te ...
 - NOIP2015 提高组(senior) 解题报告
			
过了这么久才来发解题报告,蒟蒻实在惭愧 /w\ Day1 T1 [思路] 模拟 [代码] #include<iostream> #include<cstring> #inclu ...
 - HDOJ-ACM1013(JAVA)
			
这道题也很简单~主要是将输入转为字符串(存储大数,操作字符数组) 题意: 24 : 2 + 4 = 6 输出6 39 : 3 + 9 = 12 , 1 + 2 = 3 输出3 999: 9 + 9 ...