Buscar..


Unir filas de tablas con filas generadas dinámicamente desde una celda

CROSS APPLY le permite "unir" filas de una tabla con filas generadas dinámicamente devueltas por alguna función de valor de tabla.

Imagine que tiene una tabla de empresa con una columna que contiene una matriz de productos (columna ProductList) y una función que analiza estos valores y devuelve un conjunto de productos. Puede seleccionar todas las filas de una tabla de la Compañía, aplicar esta función en una columna ProductList y "unir" los resultados generados con la fila de la Compañía principal:

SELECT *
FROM Companies c 
     CROSS APPLY dbo.GetProductList( c.ProductList ) p

Para cada fila, el valor de la celda ProductList se proporcionará a la función, y la función devolverá esos productos como un conjunto de filas que se pueden unir con la fila principal.

Unir filas de la tabla con la matriz JSON almacenada en la celda

CROSS APPLY le permite "unir" filas de una tabla con una colección de objetos JSON almacenados en una columna.

Imagine que tiene una tabla de empresa con una columna que contiene una matriz de productos (columna ProductList) formateada como matriz JSON. La función de valor de tabla OPENJSON puede analizar estos valores y devolver el conjunto de productos. Puede seleccionar todas las filas de una tabla de la Compañía, analizar los productos JSON con OPENJSON y "unir" los resultados generados con la fila de la Compañía principal:

SELECT *
FROM Companies c 
     CROSS APPLY OPENJSON( c.ProductList )
                 WITH ( Id int, Title nvarchar(30), Price money)

Para cada fila, el valor de la celda ProductList se proporcionará a la función OPENJSON que transformará los objetos JSON en filas con el esquema definido en la cláusula WITH.

Filtrar filas por valores de matriz

Si almacena una lista de etiquetas en una fila como valores separados por coma, la función STRING_SPLIT le permite transformar la lista de etiquetas en una tabla de valores. CROSS APPLY le permite "unir" valores analizados por la función STRING_SPLIT con una fila principal.

Imagine que tiene una tabla de productos con una columna que contiene una matriz de etiquetas separadas por comas (p. Ej., Promoción, ventas, nuevas). STRING_SPLIT y CROSS APPLY te permiten unir filas de productos con sus etiquetas para que puedas filtrar productos por etiquetas:

SELECT *
FROM Products p 
     CROSS APPLY STRING_SPLIT( p.Tags, ',' ) tags
WHERE tags.value = 'promo'

Para cada fila, se proporcionará el valor de la celda Etiquetas a la función STRING_SPLIT que devolverá los valores de las etiquetas. Entonces puedes filtrar filas por estos valores.

Nota: la función STRING_SPLIT no está disponible antes de SQL Server 2016



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow