如何一次遍历多个参数的SQL查询并合并结果?我的所有参数查询都会产生不同的结果

问题描述 投票:0回答:1

我有一个针对SQL Server 2012编写的查询,以获取人员动态列表并确定他们每天在某些领域花费的时间。当我一次运行一个人的查询时,我会得到很好的结果。但是,如果我在IN子句中传递所有参数,则不仅会得到较少的结果,而且某些值会有所不同,这完全是错误的。

这最终将在SSRS的报表中运行,但是即使直接在SSMS中运行数据也显示相同的行为。

@People是一个单独的查询,它收集当天实际在该地区的人员的列表。 @Yesterday@Today只是日期的变量。]​​>

SELECT *
FROM
    (SELECT 
         AdmitType,
         Time,
         Person,
         Door,
         Direction,
         CASE 
            WHEN Direction LIKE 'In' AND LEAD(Direction, 1) OVER(ORDER BY Time ASC) LIKE 'Out'
               THEN DATEDIFF (second, Time, LEAD(Time, 1) OVER(ORDER BY Time ASC))
               ELSE NULL
         END AS 'Duration'
     FROM 
         ActivityLog
     WHERE 
         Door IN ('Room1', 'Room2', 'Room3')
         AND Time BETWEEN @Yesterday AND @Today
         AND Person IN @People) s1
ORDER BY 
    Person, Door, Time ASC

如果运行上面的查询并以@People的值传递('Tom', 'Dick', 'Harry')参数,那么对于Tom的条目,我将得到类似的信息(为清楚起见,删除了一些列以及多个人和门):

Time    Direction    Duration  
-----------------------------
7:12:04 IN           922  
7:27:26 OUT          NULL  
8:40:37 IN           NULL  
9:07:04 OUT          NULL  

但是如果仅使用IN子句中列出的Tom运行查询,则会得到以下正确的信息:

Time    Direction    Duration  
-----------------------------
7:12:04 IN           922  
7:27:26 OUT          NULL  
8:40:37 IN           1587  
9:07:04 OUT          NULL  

我如何解决我的查询,以便它能与选定的每个人(通常大约25个人)一起返回正确的信息,或者采用该参数并一次运行每个人并合并结果?

[我见过一次一次传递一个列表并合并所有结果的查询,但我不知道如何编写这种方式以接受将从SSRS传递的参数输入。

我有一个针对SQL Server 2012编写的查询,以获取人员动态列表并确定他们每天在某些领域花费的时间。当我一次运行一个人的查询时,我会很好...

sql-server reporting-services sql-server-2012 parameter-passing ssrs-2012
1个回答
0
投票

看来您需要向窗口函数添加PARTITION BY。此刻

© www.soinside.com 2019 - 2024. All rights reserved.