SQL を使用したファイル ジオデータベースでのレポートと分析

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

条件のリストを評価し、結果式の 1 つを返します。

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

引数の中から最初の NULL 以外のフィールド値を返します。

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

NULL

772-5588

312-4088

Peter

NULL

NULL

594-7477

結果:

名前

Contact_Phone

Jeff

531-2531

Laura

772-5588

Peter

594-7477

EXPRESSIONS

SQL

SELECT SIN(sunangle)
FROM sightings

ArcObjects

queryDef.SubFields = "SIN(sunangle)"
queryDef.Tables = "sightings"

SET FUNCTIONS

演算子 説明

AVG

グループ内のすべての値の平均を計算します。NULL 値は無視されます。

COUNT(*)、COUNT(式)

COUNT(*)は、テーブルのレコード数を返します。NULL も含められます。COUNT(式)は、指定された式の値の数を返します。NULL は無視されます。

MAX

グループ内の最大値を見つけます。NULL 値は無視されます。

MIN

グループ内の最小値を見つけます。NULL 値は無視されます。

STDDEV、STDDEV_SAMP

式のサンプル標準偏差を返します。

STDDEV_POP

式の母標準偏差を返します。

SUM

グループ内の値を見つけます。NULL 値は無視されます。

VAR、VAR_SAMP

式のサンプル分散を返します。

VAR_POP

式の母分散を返します。

ARITHMETIC OPERATIORS

算術演算子を使用して、数値の加算、減算、乗算、除算を実行します。

演算子 説明

*

乗算のための算術演算子

/

除算のための算術演算子

+

加算のための算術演算子

-

減算のための算術演算子

FUNCTIONS

ファイル ジオデータベースでサポートされる関数の完全リストを以下に示します。

日付関数

関数 説明

CURRENT_DATE

現在の日付を返します。

EXTRACT(extract_field FROM extract_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_exp2string_exp1 に連結した結果として得られる文字列を返します。

LOWER(string_exp)

string_exp のすべての大文字を小文字に変換した文字列を返します。

POSITION(character_exp IN character_exp)

第 2 文字式に含まれている第 1 文字式の位置を返します。この結果は、精度とスケールを持つ厳密な数値であり、精度は実装定義、スケールは 0 です。

SUBSTRING (string_exp FROM start FOR length)

start で指定した文字位置から length で指定した文字数の文字列を string_exp から取得して返します。

TRIM(BOTH | LEADING | TRAILING trim_character FROM string_exp)

string_exp の先頭、末尾、または両端から trim_character を削除した文字列を返します。

UPPER(string_exp)

string_exp に一致する文字列を返します。すべての小文字が大文字に変換されます。

数値関数

すべての数値関数は数値を返します。

numeric_expfloat_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 の余弦を返します。

FLOOR(numeric_exp)

numeric_exp 以下の最も大きい整数を返します。

LOG(float_exp)

float_exp の自然対数を返します。

LOG10(float_exp)

float_exp の底が 10 の対数を返します。

MOD(integer_exp1, integer_exp2)

integer_exp2 で除算された integer_exp1 の余りを返します。

POWER(numeric_exp, integer_exp)

numeric_expinteger_exp を累乗した値を返します。

ROUND(numeric_exp, integer_exp)

numeric_exp を小数点以下の integer_exp で表される桁に丸めた値を返します。integer_exp が負の場合、numeric_exp は小数点以上の |integer_exp| で表される桁に丸められます。

SIGN(numeric_exp)

numeric_exp の符号を表す値を返します。numeric_exp が 0 よりも小さい場合は -1 が返されます。numeric_exp が 0 の場合、0 が返されます。numeric_exp が 0 より大きい場合は 1 が返されます。

SIN(float_exp)

ラジアンで角度を示した float_exp の正弦を返します。

TAN(float_exp)

ラジアンで角度を示した float_exp の正接を返します。

TRUNCATE(numeric_exp, integer_exp)

numeric_exp を小数点以下の integer_exp で表される桁に丸めた値を返します。integer_exp が負の場合、numeric_exp は小数点以上の |integer_exp| で表される桁に切り捨てられます。

GROUP BY

複数のレコードのデータを収集し、1 つ以上の列ごとに結果をグループ化するために使用します。

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 の Where 句です。

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

2 つ以上のテーブルからレコードを結合させます。

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

指定された 2 つのパラメータが等しい場合、NULLIF により NULL が返されます。そうでない場合、最初のパラメータの値が返されます。

SQL

SELECT Location, NULLIF(Sales, Forecast) as Results FROM
StoreSales

ArcObjects

queryDef.SubFields = " Location, NULLIF(Sales, Forecast) as
Results"
queryDef.Tables = "StoreSales"

StoreSales:

場所 売上 予測

Redlands

39000

55000

Palm Springs

60000

61000

Riverside

40000

40000

結果:

場所 結果

Redlands

39000

Palm Springs

60000

Riverside

NULL

ORDER BY

ソート順を指定します。順序には、昇順(ASC)または降順(DESC)の 2 種類があり、順序化の後照合されます。照合タイプには、BINARY(BIN)、CASESENSITIVE(CASE)、NOCASESENSITIVE(NOCASE)があります。BINARY 照合では、大文字小文字とアクセントの両方が区別されます。CASESENSITIVE では、大文字と小文字が区別されます。NOCASESENSITIVE では、大文字と小文字は区別されません。

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"
5/10/2014