SQL Server 2005 보고서에 단일 쿼리를 함께 사용하려고합니다. 다음과 같아야합니다 :SQL Server 2005 - 대/소문이있는 쿼리
- "eventid"열의 값에 대한 모든 개별 레코드를 한 프레임 당깁니다. -이 방법이 효과가있는 것 같습니다.
- 위에서 언급 한 각 eventid에 대해 동일한 eventid의 모든 인스턴스를 검색하여 TaskName이 'review1 %'와 같은 다른 레코드가 있는지 확인해야합니다. 다시 말하지만, 이것은 효과가있는 것으로 보인다.
- 여기에 상황이 복잡해집니다. TaskName이 review1 인 각 레코드에 대해 동일한 eventid 및 TaskName = 'End'가있는 다른 레코드가 있는지 확인해야합니다. 궁극적으로, 얼마나 많은 레코드가 'review1 %'와 같은 TaskName을 가지고 있는지, 그리고 얼마나 많은 TaskName이 'review1 %'및 TaskName = 'End'인지를 필요로합니다. 각 레코드에 대해 새 값을 설정하고 eventid에 대해 TaskName = 'End'로 레코드가 존재하는 경우 1로 설정하고 0으로 설정하면 수행 할 수 있다고 생각합니다.
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 = '종료'를 가지고있는 이벤트 ID 년대 다시 나타납니다을 쿼리는 아래 위의 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')) and TaskName like 'Review1%') AS T
WHERE seq = 1
and eventid in
(Select eventid from
eventrecords
where TaskName = 'End')
order by eventid
(10)는 그래서 달성하려고 다음과 같은 노력했습니다 # 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의 원인을 잘 모릅니다. 미리 감사드립니다.
Mark, 동일한 eventid를 가진 TaskName이 존재하는지 확인하려고하며 예/아니오를 표시하려고합니다. , 진실/거짓 종류의 가치. 내가 가지고있는 것처럼 쿼리를 남겨두면 TaskName이 'Review1 %'와 같은 레코드와 TaskName이 'End'인 다른 레코드를 가진 모든 이벤트 ID를 다시 가져옵니다. 내 보고서에 '끝'이있는 레코드와 끝이없는 레코드의 합계 값을 가져와야합니다. – user329266
@ user329266 : 더 많은 도움을 드리고 싶지만 귀하의 질문에 따르기가 다소 어렵습니다.a) 모든 테이블 정의를 게시하면 더 많은 것을 도울 수 있습니다. b) 테스트 데이터를이 테이블에 삽입하는 일부 SQL 문. 각 테이블마다 10 개의 행 c) 테스트 데이터에서 실행될 때 쿼리의 필수 출력 –