Microsoft SQL Server
применять крест
Поиск…
Объединение строк таблицы с динамически сгенерированными строками из ячейки
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