Поиск…


Объединение строк таблицы с динамически сгенерированными строками из ячейки

CROSS APPLY позволяет вам «присоединяться» к строкам из таблицы с динамически сгенерированными строками, возвращаемыми некоторой функцией табличного значения.

Представьте, что у вас есть таблица компании со столбцом, содержащим массив продуктов (столбец ProductList), и функцию, которая анализирует эти значения и возвращает набор продуктов. Вы можете выбрать все строки из таблицы компании, применить эту функцию в столбце ProductList и «сгенерировать результаты» с родительской строкой компании:

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

Для каждой строки значение функции ProductList будет предоставлено функции, и функция вернет эти продукты в виде набора строк, которые могут быть соединены с родительской строкой.

Присоединить строки таблицы с массивом JSON, хранящимся в ячейке

CROSS APPLY позволяет вам «присоединяться» к строкам из таблицы с коллекцией объектов JSON, хранящихся в столбце.

Представьте, что у вас есть таблица компании со столбцом, содержащим массив продуктов (столбец ProductList), отформатированный как массив JSON. Функция значения функции OPENJSON может анализировать эти значения и возвращать набор продуктов. Вы можете выбрать все строки из таблицы компании, проанализировать продукты JSON с помощью OPENJSON и «сгенерировать результаты» с родительской строкой компании:

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

Для каждой строки значение ячейки ProductList будет предоставлено функции OPENJSON, которая преобразует объекты JSON в строки со схемой, определенной в предложении WITH.

Фильтровать строки по значениям массива

Если вы храните список тегов в строке как значения, разделенные комой, функция STRING_SPLIT позволяет вам преобразовать список тегов в таблицу значений. CROSS APPLY позволяет вам «присоединить» значения, проанализированные функцией STRING_SPLIT, с родительской строкой.

Представьте, что у вас есть таблица Product с столбцом, который содержит массив тегов, разделенных запятыми (например, promo, sales, new). STRING_SPLIT и CROSS APPLY позволяют вам присоединяться к рядам продуктов с их тегами, чтобы вы могли фильтровать продукты по тегам:

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

Для каждой строки значение ячейки меток будет предоставлено функции STRING_SPLIT, которая вернет значения тегов. Затем вы можете фильтровать строки по этим значениям.

Примечание. Функция STRING_SPLIT недоступна до SQL Server 2016



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow