gpt4 book ai didi

sql - 如何迭代填充临时表并将结果填充到列中?

转载 作者:行者123 更新时间:2023-12-02 17:09:59 27 4
gpt4 key购买 nike

如果我想知道每个用户在某一天在 Intranet 上花费了多少时间,我可以使用自定义函数 - 2 个示例:

select * from [dbo].[usertime]('2016-04-08')

userid totaltime
-----------------
1 4430
2 11043
5 13045


select * from [dbo].[usertime]('2016-04-09')

userid totaltime
-----------------
1 345
3 12066
9 15344

我无法控制该函数,只能使用它的输出。 总时间以秒为单位。

从另一个表中,我可以选择一年中的日期:

select * from dates;

date
----------
2016-01-01
...
2016-04-08
2016-04-09

我想为 dates 表中的每个 date 运行自定义函数 usertime 并将结果存储在临时表中,如下所示如下:

userid  2016-01-01  ..  2016-04-08  2016-04-09
----------------------------------------------
1 .. 4430 345
2 .. 11043 0
3 .. 0 12066
5 .. 13045 0
9 .. 0 15344

这需要我在循环中调用usertime,伪:

create table #usertime
(
userid int
date date
seconds int
)

select * into #dates from dates;

foreach (#dates as _date)
update #usertime with [dbo].[usertime](_date)

select * from #usertime

userid 2016-01-01 .. 2016-04-08 2016-04-09
----------------------------------------------
1 .. 4430 345
2 .. 11043 0
3 .. 0 12066
5 .. 13045 0
9 .. 0 15344

我知道我需要动态 SQL 来每次使用不同的日期循环,并使用 stuff() 从来自 #usertime 的结果集中的行创建多个列。但我不明白如何使用这些功能。有人可以帮我吗?

最佳答案

不需要任何循环(在 SQL 中几乎总是应该避免这种情况)。

SELECT
T.userid,
D._date,
T.totaltime
FROM
#dates D -- Probably no need for a temporary table either...
CROSS APPLY dbo.usertime(D._date) T

如果您需要对这些结果进行透视,那么您也可以这样做。

关于sql - 如何迭代填充临时表并将结果填充到列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36500916/

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