2012-09-29 3 views
0

내 SSRS 보고서에는 다음 데이터를 보여주는 행렬이 있습니다. 행렬의 모든 데이터가 동적입니다. 내가 원하는 무엇SSRS/SQL 쿼리의 첫 번째 행 데이터 계산

Departure Arravial  Bus name  Tour 
01:51  02:01  07 ABY 04 
02:02  02:12  07 AB 978 
02:21  02:31  07 ABY 04 
02:32  02:42  07 AB 978 
03:01  03:11  07 ABY 04 
03:02  03:12  07 AB 978 
03:31  03:41  07 ABY 04 
03:42  03:52  07 AB 978 
04:01  04:11  07 ABY 04 

는 첫 번째 행 버스 이름을 계산하고 옆에 넣어입니다. 이것은 표현으로 성취 할 수 있습니까? 또는 SQL에서 이러한 쿼리를 어떻게 만듭니 까? 이 퍼즐을 어떻게 풀 수 있습니까?

Departure Arravial  Bus name  Tour 
01:51  02:01  07 ABY 04  1 
02:02  02:12  07 AB 978  
02:21  02:31  07 ABY 04  2 
02:32  02:42  07 AB 978  
03:01  03:11  07 ABY 04  3 
03:02  03:12  07 AB 978  
03:31  03:41  07 ABY 04  4 
03:42  03:52  07 AB 978  
04:01  04:11  07 ABY 04  5 

이 그런데 내 쿼리입니다,

SELECT HCPD.DepartureTime, HCPD.ArrivalTime, V.BusName 
FROM HAT_CALISMA_PLANI HCP WITH(NOLOCK) 
INNER JOIN HAT_CALISMA_PLANI_DETAY HCPD WITH(NOLOCK) ON HCPD.HatCalismaPlaniKey = HCP.HatCalismaPlaniKey 
INNER JOIN VALIDATOR V WITH(NOLOCK) ON V.ValidatorKey = HCPD.ValidatorKey 
WHERE HCPD.DepartureTime = @Time AND HCP.HatKey = @HatKey 
ORDER BY HCPD.DepartureTime 

편집 : 버스 이름은 동적입니다.

답변

2

당신은 당신의 쿼리에 row_number()을 적용하여이 작업을 수행 할 수 있습니다 여기에

select DepartureTime, ArrivalTime, BusName, 
    case when BusName ='07 ABY 04' 
     then cast(rn as varchar(10)) 
     else '' end Tour 
from 
(
    SELECT HCPD.DepartureTime, HCPD.ArrivalTime, V.BusName, 
    row_number() over(partition by busname order by departure) rn 
    FROM HAT_CALISMA_PLANI HCP WITH(NOLOCK) 
    INNER JOIN HAT_CALISMA_PLANI_DETAY HCPD WITH(NOLOCK) 
    ON HCPD.HatCalismaPlaniKey = HCP.HatCalismaPlaniKey 
    INNER JOIN VALIDATOR V WITH(NOLOCK) 
    ON V.ValidatorKey = HCPD.ValidatorKey 
    WHERE HCPD.DepartureTime = @Time 
    AND HCP.HatKey = @HatKey 
) x 
order by DepartureTime; 

은 샘플 쿼리입니다 :

select departure, arrival, busname, 
    case when busname ='07 ABY 04' 
     then cast(rn as varchar(10)) 
     else '' end Tour 
from 
(
    select departure, arrival, busname, 
    row_number() over(partition by busname order by departure) rn 
    from yourtable 
) x 
order by departure; 

내가 눈치 SQL Fiddle with Demo

+2

를 참조하십시오 당신이 내장 된 스키마를 수동으로 만들었지 만, OP의 데이터를 SQL Fiddle의 "Text to DDL"유틸리티에 복사하여 붙여 넣기 만하면 더 빨리 수행 할 수있었습니다. 이 기능에 대해서는 이미 알고 있었지만 최근에는 다양한 입력 형식을보다 잘 처리하기 위해이 기능을 향상 시켜서 언급하고 싶습니다. 다음은 그것이 생성 할 출력의 예입니다. http://sqlfiddle.com/#!6/c4682 –

+0

@jake 와우 사실 저도 몰랐습니다. 입력 할 필요가 크게 줄어 듭니다. 정보 주셔서 감사합니다. :) – Taryn

+0

아무런 문제가 없습니다. –

관련 문제