0

私のSSRSレポートには、次のデータを示すマトリックスがあります...マトリックス内のすべてのデータは動的です。

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

編集:バス名は動的です。

4

1 に答える 1

2

row_number()クエリにa を適用することで、これを実行できる場合があります。

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 を参照してください

于 2012-09-29T13:55:24.163 に答える