Manipulación de campos de resolicitud en un árbol de mensajes

En este tema se describe el uso de la función SELECT y otras funciones de columna para manipular los campos de resolicitud en un árbol de mensajes.

Acerca de esta tarea

Suponga que desea realizar una acción especial en las facturas que tienen un valor total de pedido superior a una cantidad determinada. Para calcular el valor de orden total de unInvoice, debe multiplicar el campoPricecampos por elQuantitycampos en todos los camposItemsen el mensaje, y el total del resultado. Puede hacerlo utilizando una expresión SELECT como se indica a continuación:

(
 SELECT SUM( CAST(I.Price AS DECIMAL) * CAST(I.Quantity AS INTEGER) )
  FROM Body.Invoice.Purchases."Item"[] AS I
) 

En el ejemplo se presupone que es necesario utilizar expresiones CAST para convertir los valores de serie de los camposPriceyQuantityen los tipos de datos correctos. El reparto de laPriceen un decimal produce un valor decimal con la escala y precisión natural , es decir, cualquier escala y precisión es necesaria para representar el número. Estas transformaciones CAST no serán necesarias si los datos ya estaban en un tipo de datos adecuado.

La expresión SELECT funciona de un modo similar al predicado cuantificado y de un modo muy similar a como funciona SELECT en SQL de base de datos estándar. La cláusula FROM especifica lo que se está iterando, en este caso, todosItemcampos enInvoice, y establece que la instancia actual deItemse puede hacer referencia a la utilizaciónI. Esta forma de SELECT implica una función de columna, en este caso la función SUM, por lo que se evalúa la selección mediante la adición de los resultados de la evaluación de la expresión dentro de la función SUM para cadaItemen el campoInvoice. Al igual que con SQL estándar, los valores NULL se ignoran por las funciones de columna, con la excepción de la función de columna COUNT que se explica más adelante en esta sección, y la función de columna devuelve un valor NULL sólo si no hay valores que no sean NULL para combinar.

Las otras funciones de columnas proporcionadas son MAX, MIN y COUNT. La función COUNT tiene dos formatos que funcionan de diferentes maneras en relación con los valores NULL. El primer formato se utiliza de forma muy similar a la función SUM anterior, por ejemplo:

SELECT COUNT(I.Quantity)
  FROM Body.Invoice.Purchases."Item"[] AS I

Esta expresión devuelve el número deItemcampos para los que elQuantitycampo no es NULL. Esto es, la función COUNT cuenta valores que no son NULL, del mismo modo que la función SUM añade valores que no son NULL. El modo alternativo de utilizar la función COUNT es la siguiente:

SELECT COUNT(*)
  FROM Body.Invoice.Purchases."Item"[] AS I

El uso de COUNT (*) cuenta el número total deItem, independientemente de si alguno de los campos es NULL. De hecho, el ejemplo anterior es equivalente a utilizar la función CARDINALITY, como a continuación:

CARDINALITY(Body.Invoice.Purchases."Item"[])

En todos los ejemplos de SELECT que se han proporcionado aquí, del mismo modo que en SQL estándar, puede utilizar una cláusula WHERE para proporcionar el filtrado de los campos.