【发布时间】:2016-04-15 10:38:05
【问题描述】:
如果我想知道每个用户在某一天在 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
我无法控制函数,只能使用它的输出。 totaltime 以秒为单位。
从另一个表中,我可以选择一年中的日期:
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 Server dynamic PIVOT query? 的可能重复项。这个问题已经被问了上百次了。
-
[dbo].[usertime]('2016-04-08') 还必须接收用户 ID。不是吗?
-
@RuslanK。 - 不,一定不能。唯一的输入是日期。该函数首先检索当天登录的用户的不同列表,然后从另一个表中检索在网站上花费的总时间:)
-
@Pr0no,抱歉疏忽,现在我看到该函数不是标量而是表值。
-
从同一用户复制,略有改动....stackoverflow.com/questions/36363932/…
标签: sql sql-server