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:
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 sightings
ArcObjects
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_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:
位置 | 売上 | 予測 |
レッドランズ | 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_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"