试图将单个查询放在一起以最终在 SQL Server 2005 报告中使用。我需要:
- 在一段时间内提取“eventid”列中值的所有不同记录 - 这似乎有效。
- 对于上面引用的每个 eventid,我需要搜索相同 eventid 的所有实例,以查看是否有另一条带有 TaskName 的记录,例如“review1%”。同样,这似乎有效。
- 这就是事情变得复杂的地方:对于 TaskName 类似于 review1 的每条记录,我需要查看是否存在具有相同 eventid 以及 TaskName='End' 的另一条记录。最后,我需要计算有多少条记录有 TaskName 像'review1%',然后有多少条 TaskName 像'review1%' AND TaskName='End'。我认为这可以通过为每条记录设置一个新值来完成,对于 eventid,如果存在 TaskName='End' 的记录,则设置为 1,如果不存在,则设置为 0。
下面的查询似乎完成了上面的第 1 项:
SELECT eventid, TimeStamp, TaskName, filepath
FROM (SELECT eventid, TimeStamp, filepath, TaskName,
ROW_NUMBER() OVER(PARTITION BY eventid
ORDER BY TimeStamp DESC)
AS seq
FROM eventrecords where ((TimeStamp >= '2010-4-1 00:00:00.000')
and (TimeStamp <= '2010-4-21 00:00:00.000'))) AS T
WHERE seq = 1 order by eventid
下面的查询似乎完成了#2:
SELECT eventid, TimeStamp, TaskName, filepath
FROM (SELECT eventid, TimeStamp, filepath, TaskName,
ROW_NUMBER() OVER(PARTITION BY eventid
ORDER BY TimeStamp DESC)
AS seq
FROM eventrecords where ((TimeStamp >= '2010-4-1 00:00:00.000')
and (TimeStamp <= '2010-4-21 00:00:00.000')) and TaskName like 'Review1%') AS T
WHERE seq = 1 order by eventid
这将带回也具有 TaskName='End' 的 eventid:
SELECT eventid, TimeStamp, TaskName, filepath
FROM (SELECT eventid, TimeStamp, filepath, TaskName,
ROW_NUMBER() OVER(PARTITION BY eventid
ORDER BY TimeStamp DESC)
AS seq
FROM eventrecords where ((TimeStamp >= '2010-4-1 00:00:00.000')
and (TimeStamp <= '2010-4-21 00:00:00.000')) and TaskName like 'Review1%') AS T
WHERE seq = 1
and eventid in
(Select eventid from
eventrecords
where TaskName = 'End')
order by eventid
所以我尝试了以下方法来尝试完成#3:
SELECT eventid, TimeStamp, TaskName, filepath
FROM (SELECT eventid, TimeStamp, filepath, TaskName,
ROW_NUMBER() OVER(PARTITION BY eventid
ORDER BY TimeStamp DESC)
AS seq
FROM eventrecords where ((TimeStamp >= '2010-4-1 00:00:00.000')
and (TimeStamp <= '2010-4-21 00:00:00.000')) and TaskName like 'Review1%') AS T
WHERE seq = 1
and
case
when (eventid in
(Select eventid from
eventrecords
where TaskName = 'End') then 1
else 0) as bit
end
order by eventid
当我尝试运行它时,我得到:“关键字'then'附近的语法不正确。” 不知道我做错了什么。在任何地方都没有看到任何像这样的例子。
我应该提到 eventrecords 有一个主键,但是当我包含它时它似乎没有任何帮助,而且我不允许更改表。(呃)我收到了一个使用游标和临时表的建议,但我不确定在报告运行时这会如何影响性能。提前致谢。