Utilizar SQL para la presentación de informes y análisis en las geodatabases de archivos
La geodatabase de archivos permite mejorar la presentación de informes y análisis mediante el uso de expresiones y alias por medio de subcampos (lista de campos) en QueryDef. Además ORDER BY y GROUP BY son compatibles con PostFixClause. En apoyo de GROUP BY, las expresiones incluyen funciones de agregación como MIN, MAX y SUM.
ALIAS
Da a una columna otro nombre para proporcionar más comprensión de salida.
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
Evalúa una lista de condiciones y devuelve una de varias expresiones de resultado.
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 "
FUSIÓN
Devuelve el primer valor de campo no nulo entre sus argumentos.
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:
Nombre |
Business_Phone |
Cell_Phone |
Home_Phone |
Jeff |
531 622-2531-7813 |
565-9901 |
|
Laura |
NULO |
772 312-5588-4088 |
|
Peter |
NULO |
NULO |
594-7477 |
Resultado:
Nombre |
Contact_Phone |
Jeff |
531-2531 |
Laura |
|
Peter |
EXPRESIONES |
EXPRESIONES
SQL
SELECT SIN(sunangle) FROM sightings
ArcObjects
queryDef.SubFields = "SIN(sunangle)" queryDef.Tables = "sightings"
FUNCIONES DE CONJUNTO
Operador | Descripción |
AVG |
Calcula el promedio de todos los valores en el grupo. Se ignoran los valores nulos. |
COUNT(*), COUNT(expresión) |
COUNT(*) devuelve la cantidad de registros en una tabla. Se incluyen valores nulos. COUNT(expresión) devuelve el número de valores en la expresión especificada. Se ignoran los nulos. |
MAX |
Busca los valores máximos en el grupo. Se ignoran los valores nulos. |
MIN |
Encuentra el valor mínimo en el grupo. Se ignoran los valores nulos. |
STDDEV, STDDEV_SAMP |
Devuelve la muestra la desviación estándar de la expresión. |
STDDEV_POP |
Devuelve la desviación de población estándar de la expresión. |
SUM |
Busca los valores en el grupo. Se ignoran los valores nulos. |
VAR, VAR_SAMP |
Devuelve la varianza de muestra de la expresión. |
VAR_POP |
Devuelve la varianza de población de la expresión. |
OPERARIOS ARITMÉTICOS
Se utiliza un operador aritmético para sumar, restar, multiplicar y dividir valores numéricos.
Operador | Descripción |
* |
Operador aritmético para la multiplicación |
/ |
Operador aritmético para la división |
+ |
Operador aritmético para la suma |
- |
Operador aritmético para la resta |
FUNCIONES
A continuación se muestra la lista completa de funciones admitidas por las geodatabases de archivos.
Funciones de fecha
Función | Descripción |
CURRENT_DATE |
Devuelve la fecha actual. |
EXTRACTO (extract_field DESDE extract_source) |
Devuelve la porción extract_field deextract_source. El argumento extract_source es una expresión de fecha y hora. El argumento extract_field puede ser una de las siguientes palabras clave: YEAR, MONTH, DAY, HOUR, MINUTE, o SECOND. |
CURRENT TIME |
Devuelve la hora actual. |
CURRENT_TIMESTAMP |
Devuelve la fecha y hora actual. |
Funciones de cadena de caracteres
Los argumentos denotados como string_exp pueden ser el nombre de una columna, una cadena de caracteres literal o el resultado de otra función escalar, donde el tipo de datos subyacentes se pueda representar como un tipo de carácter.
Los argumentos denotados como character_exp son cadenas de caracteres de longitud variable.
Los argumentos denotados como start o length pueden ser literal-numérico o el resultado de otra función escalar, donde el tipo de datos subyacentes se pueda representar como un tipo numérico.
Estas funciones de cadena están basadas en 1; es decir, el primer carácter de la cadena es el número 1.
Función | Descripción |
CHAR_LENGTH(string_exp) |
Devuelve la longitud en caracteres de la expresión de cadena. |
CONCAT(string_exp1, string_exp2) |
Devuelve una cadena de caracteres que es el resultado de la concatenación de string_exp2 con string_exp1. |
LOWER(string_exp) |
Devuelve una cadena de caracteres equivalente a la de string_exp, con todos los caracteres en mayúsculas convertidos en minúsculas. |
POSITION(character_exp IN character_exp) |
Devuelve la posición de la primera expresión de carácter en la segunda expresión de carácter. El resultado es un número exacto con una precisión definida por implementación y una escala de cero. |
SUBCADENA DE CARACTERES (string_exp DESDE inicio PARA longitud) |
Devuelve una cadena de caracteres derivada de string_exp, que comienza en la posición de carácter especificada por los caracteres start para length. |
TRIM(BOTH | LEADING | TRAILING trim_character FROM string_exp) |
Devuelve string_exp con trim_character quitado del extremo inicial, del extremo final o de ambos extremos de la cadena. |
UPPER(string_exp) |
Devuelve una cadena equivalente a la de string_exp, con todos los caracteres en minúsculas convertidos en mayúsculas. |
Funciones numéricas
Todas las funciones numéricas devuelven un valor numérico.
Los argumentos denotados como numeric_exp, float_exp o integer_exp pueden ser el nombre de una columna, el resultado de otra función escalar o un literal-numérico, donde los tipos de datos subyacentes pueden representarse como un tipo numérico.
Función | Descripción |
ABS(numeric_exp) |
Devuelve el valor absoluto de numeric_exp. |
ACOS(float_exp) |
Devuelve el arcocoseno de float_exp como un ángulo expresado en radianes. |
ASIN(float_exp) |
Devuelve el arcoseno de float_exp como un ángulo expresado en radianes. |
ATAN(float_exp) |
Devuelve el arco tangente de float_exp como un ángulo expresado en radianes. |
CEILING(numeric_exp) |
Devuelve el entero más pequeño mayor o igual que numeric_exp. |
COS(float_exp) |
Devuelve el coseno de float_exp, donde float_exp es un ángulo expresado en radianes. |
FLOOR(numeric_exp) |
Devuelve el entero más grande menor o igual que numeric_exp. |
LOG(float_exp) |
Devuelve el logaritmo natural de float_exp. |
LOG10(float_exp) |
Devuelve el logaritmo de base 10 de float_exp. |
MOD(integer_exp1, integer_exp2) |
Devuelve el restante de integer_exp1 dividido por integer_exp2. |
POWER(numeric_exp, integer_exp) |
Devuelve el valor de numeric_exp a la potencia de integer_exp. |
ROUND(numeric_exp, integer_exp) |
Devuelve numeric_exp redondeado a integer_exp lugares a la derecha del punto decimal. Si integer_exp es negativo, numeric_exp se redondea a |integer_exp| lugares a la izquierda del punto decimal. |
SIGN(numeric_exp) |
Devuelve un indicador del signo de numeric_exp. Si numeric_exp es menor que cero, se devuelve -1. Si numeric_exp es igual a cero; se devuelve 0. Si numeric_exp es mayor que cero; se devuelve 1. |
SIN(float_exp) |
Devuelve el seno de float_exp, donde float_exp es un ángulo expresado en radianes. |
TAN(float_exp) |
Devuelve la tangente de float_exp, donde float_exp es un ángulo expresado en radianes. |
TRUNCATE(numeric_exp, integer_exp) |
Devuelve numeric_exp truncado a integer_exp lugares a la derecha del punto decimal. Si integer_exp es negativo, numeric_exp se trunca a |integer_exp| lugares a la izquierda del punto decimal. |
AGRUPAR POR
Se utiliza para adquirir datos en varios registros y agrupar los resultados por una o más columnas
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"
TENER
Una cláusula where sobre 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"
UNIONES
Combina los registros de dos o más tablas.
Unión de cruce
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"
Unión interna
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"
Unión externa izquierda
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"
Unión derecha externa
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
NULO SI devuelve NULO si los dos parámetros proporcionados son iguales; de lo contrario, se devuelve el valor del primer parámetro
SQL
SELECT Location, NULLIF(Sales, Forecast) as Results FROM StoreSales
ArcObjects
queryDef.SubFields = " Location, NULLIF(Sales, Forecast) as Results" queryDef.Tables = "StoreSales"
StoreSales:
Ubicación | Ventas | Previsión |
Redlands |
39000 |
55000 |
Palm Springs |
60000 |
61000 |
Riverside |
40000 |
40000 |
Resultado:
Ubicación | Resultados |
Redlands |
39000 |
Palm Springs |
Riverside ( 60000 |
Riverside |
NULO |
ORDER BY
Especifica el orden de clasificación. El orden puede ser ascendente (ASC) o descendente (DESC) y ser recogidos. Los tipos de intercalación incluyen BINARY(BIN), CASESENSITIVE(CASE) y NOCASESENSITIVE(NOCASE). La intercalación binaria es tanto caso como acento sensibles. Casesensitive distingue entre mayúsculas y minúsculas cartas. Nocasesensitive no distingue entre mayúsculas y minúsculas cartas.
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"