尝试将单个查询放在一起以便最终在SQL Server 2005报表中使用。我需要:SQL Server 2005 - 使用case语句进行查询
- 拉一个时间范围内的“eventid”列中的值的所有不同的记录 - 这似乎工作。
- 对于上面引用的每个eventid,我需要搜索同一个eventid的所有实例,以查看是否存在TaskName为'review1%'的另一条记录。再次,这似乎工作。
- 这是事情变得复杂的地方:对于TaskName与review1类似的每个记录,我需要查看是否有另一条记录存在相同的eventid和TaskName ='End'。最近,我需要计算多少个记录的TaskName类似于'review1%',然后有多少个TaskName如'review1%'和TaskName ='End'。我认为这可以通过为每个记录设置一个新的值来完成,并为事件ID,如果记录与TASKNAME =“终结”,设置为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
这将带回的事件ID的也有TASKNAME =“终结” :
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
当我尝试运行此,我得到:“附近关键字‘然后’的语法不正确。”不知道我做错了什么。在任何地方都没有见过这样的例子。
我应该提到eventrecords有一个主键,但它在包含它时似乎没有任何帮助,并且我不允许更改该表。 (呃)我收到了一个使用游标和临时表的建议,但我不确定在报告运行时badley会如何让性能下降。提前致谢。
马克,我想如果TASKNAME检查与相同的事件ID exisits,我希望它显示是/否,真/假的价值。如果我离开查询,就会返回所有包含TaskName记录的Eventid,如'Review1%',另一条记录的TaskName ='End'。我需要在报告中获得'End'和没有End的记录总值。 – user329266 2010-04-30 12:25:01
@ user329266:我想帮助更多,但您的问题很难遵循。如果您发布a)所有表定义b)将测试数据插入到这些表中的一些SQL语句,例如,每个表格有10行c)在测试数据上运行时查询所需的输出 – 2010-04-30 13:09:56