天天看點

在檔案地理資料庫中使用 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"