gpt4 book ai didi

tsql - T-SQL - 交叉应用到 PIVOT? (将数据透视表与表值函数一起使用)?

转载 作者:行者123 更新时间:2023-12-04 22:14:19 24 4
gpt4 key购买 nike

我有一个表值函数,基本上是一个拆分型函数,每个数据字符串最多返回 4 行。

所以我跑:

select * from dbo.split('a','1,a15,b20,c40;2,a25,d30;3,e50')

我得到:

Seq  Data
1 15
2 25

但是,我的最终数据需要看起来像

15 25

所以我做一个支点。

select [1],[2],[3],[4] 
from dbo.split('a','1,a15,b20,c40;2,a25,d30;3,e50')
pivot (max(data) for seq in ([1],[2],[3],[4]))
as pivottable

按预期工作:

1    2
--- ---
15 25

但是,这对于一行来说很棒。我现在需要同时处理数百条记录。我的想法是做一个 CROSS APPLY,但不确定如何结合 CROSS APPLY 和 PIVOT。

(是的,很明显,简单的答案是编写一个返回 4 列的修改版本,但由于其他原因,这不是一个很好的选择)

非常感谢任何帮助。

以及我这样做的原因:当前查询使用 SPLIT 的标量值版本,在同一 SELECT 中针对相同的百万行(其中数据字符串为 500+ 字节)调用 12 次。

据我所知,这需要它扫描相同的 500 字节 * 1000000 行,12 次。

最佳答案

这就是您使用交叉应用的方式。假设 table1 是您的表,Line 是您要拆分的表中的字段

SELECT * fROM table1 as a
cross apply dbo.split(a.Line) as b
pivot (max(data) for seq in ([1],[2],[3],[4])) as p

关于tsql - T-SQL - 交叉应用到 PIVOT? (将数据透视表与表值函数一起使用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7599589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com