嘗試將單個查詢放在一起以便最終在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