QueryDef の SubFields (フィールド リスト) メソッドを介して式とエイリアスを使用すると、ファイル ジオデータベースでの分析とレポートが向上します。さらに、PostFixClause を通じて ORDER BY と GROUP BY がサポートされます。GROUP BY のサポートでは、式に MIN、MAX、SUM などの集計関数が含まれます。
以下に、ファイル ジオデータベースで使用できる関数の一覧と例を示します。
ALIAS
わかりやすい出力にするために、コラムに別の名前を付けます。
SQL
SELECT NAME, POP1997 - POP1990 as PopChange
FROM counties ORDER BY NAMEArcObjects
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 ASCArcObjects
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_InfoArcObjects
queryDef.SubFields = "Name, COALESCE(Business_Phone, Cell_Phone,
Home_Phone) Contact_Phone"
queryDef.Tables = "Contact_Info"Contact_Info:
| Name | Business_Phone | Cell_Phone | Home_Phone | 
| Jeff | 531-2531 | 622-7813 | 565-9901 | 
| Laura | NULL | 772-5588 | 312-4088 | 
| Peter | NULL | NULL | 594-7477 | 
結果:
| Name | Contact_Phone | 
| Jeff | 531-2531 | 
| Laura | 772-5588 | 
| Peter | 594-7477 | 
条件式
SQL
SELECT SIN(sunangle)
FROM sightingsArcObjects
queryDef.SubFields = "SIN(sunangle)"
queryDef.Tables = "sightings"関数の設定
| 演算子 | 説明 | 
| AVG | グループ内のすべての値の平均を計算します。NULL 値は無視されます。 | 
| COUNT (*)、COUNT (式) | COUNT (*) は、テーブルのレコード数を返します。NULL も含められます。COUNT (式) は、指定された式の値の数を返します。NULL は無視されます。 | 
| MAX | グループ内の最大値を見つけます。NULL 値は無視されます。 | 
| MIN | グループ内の最小値を見つけます。NULL 値は無視されます。 | 
| STDDEV、STDDEV_SAMP | 式のサンプル標準偏差を返します。 | 
| STDDEV_POP | 式の母標準偏差を返します。 | 
| SUM | グループ内の値を見つけます。NULL 値は無視されます。 | 
| VAR、VAR_SAMP | 式のサンプル分散を返します。 | 
| VAR_POP | 式の母分散を返します。 | 
算術演算子
算術演算子を使用して、数値の加算、減算、乗算、除算を実行します。
| 演算子 | 説明 | 
| * | 乗算のための算術演算子 | 
| / | 除算のための算術演算子 | 
| + | 加算のための算術演算子 | 
| - | 減算のための算術演算子 | 
関数
ファイル ジオデータベースでサポートされる関数の完全リストを以下に示します。
日付関数
| 関数 | 説明 | 
| 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_exp2 を string_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 | TRAILINGtrim_characterFROM string_exp) | string_exp の先頭、末尾、または両端から trim_character を削除した文字列を返します。 | 
| 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 の余弦を返します。 | 
| 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_exp に integer_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_NAMEArcObjects
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) < 50000ArcObjects
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 Table2ArcObjects
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.C3ArcObjects
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.C3ArcObjects
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.C3ArcObjects
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
StoreSalesArcObjects
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 | 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_NAMEArcObjects
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 ASCArcObjects
pQueryDef.SubFields = "STATE_NAME, POP1990"
pQueryDef.Tables = "counties"
pQueryDef.PostfixClause = "ORDER BY STATE_NAME COLLATE BINARY
ASC"