SQL Server笔记 -- 第34章:cross apply

第34.1节:将表行与单元格中动态生成的行连接

CROSS APPLY使你能够将表中的行与某些表值函数返回的动态生成的行"连接"。

想象一下,你有一个公司表,其中包含一列存储产品数组(ProductList列),以及一个解析这些值并返回产品集的函数。你可以选择公司表中的所有行,将此函数应用于ProductList列,并将生成的结果与父公司行"连接":

sql 复制代码
SELECT *
FROM Companies c
CROSS APPLY dbo.GetProductList(c.ProductList) p

对于每一行,ProductList单元格的值将提供给函数,函数将返回这些产品作为一组行,可以与父行连接。

第34.2节:将表行与单元格中存储的JSON数组连接

CROSS APPLY使你能够将表中的行与单元格中存储的JSON对象集合"连接"。

想象一下,你有一个公司表,其中包含一列存储产品数组(ProductList列),格式为JSON数组。OPENJSON表值函数可以解析这些值并返回产品集。你可以选择公司表中的所有行,使用OPENJSON解析JSON产品,并将生成的结果与父公司行"连接":

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

对于每一行,ProductList单元格的值将提供给OPENJSON函数,该函数将使用WITH中定义的架构将JSON对象转换为行。

第34.3节:按数组值过滤行

如果你在行中将标签列表存储为逗号分隔的值,STRING_SPLIT函数使你能够将标签列表转换为值表。CROSS APPLY使你能够将STRING_SPLIT函数解析的值与父行"连接"。

想象一下,你有一个产品表,其中包含一列存储逗号分隔的标签数组(例如promo,sales,new)。STRING_SPLIT和CROSS APPLY使你能够将产品行与其标签连接,以便你可以按标签过滤产品:

sql 复制代码
SELECT *
FROM Products p
CROSS APPLY STRING_SPLIT(p.Tags, ',') tags
WHERE tags.value = 'promo'

对于每一行,Tags单元格的值将提供给STRING_SPLIT函数,该函数将返回标签值。然后你可以按这些值过滤行。

注意:STRING_SPLIT函数在SQL Server 2016之前不可用。

相关推荐
lsh曙光5 分钟前
延时at指令和定时cron指令
linux·服务器·网络
天桥下的卖艺者30 分钟前
使用scitable包,两步生成逆概率删失权重(IPCW)
数据库·r语言
隔窗听雨眠1 小时前
AI原生数据库浪潮:国产数据库的架构重构与路径之争
数据库
郭老二1 小时前
【前端】vue3:编译步骤
前端
数据库小学妹1 小时前
数据库选型实战:从数据类型到TCO成本,五维决策框架+九款产品横评
数据库·信创·国产数据库·数据库选型·oracle迁移
tq10861 小时前
开放与封闭:类型系统的安全哲学
笔记
不在逃避q2 小时前
Trae/Vs Code/Cursor命令行无法跑npm命令
前端·arcgis·npm
夏殇之殁2 小时前
包中创建自定义列表项。 . 使用自定义列表项进行数据绑定 . 将天气预报数据保存到本地内存表,通过LiveBindings进行显示。 ...
服务器·前端·javascript
龙仔7252 小时前
人大金仓 KingbaseES V8 只读账号创建完整运维笔记
运维·笔记·sql·人大金仓
韭菜炒鸡肝天2 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt