отметьте от одного до пяти столбцов подряд - PullRequest
0 голосов
/ 10 сентября 2018

Таблица Train_status_new содержит (4000+) подробную информацию о кодах станции, через которую проходит поезд.

Train_status_new

  RunId TrainNumber OriginStation_Name  PrevStation_Name    CurrentStation_Name     NextStation_Name    DestinationStation_Name
    1       6063            MS              VM                      NPM                 TDPR                NCJ
    1       6853            KIK             TMPT                    NCR                 NULL                NCR
    2       6027            TBM             VM                      ICG                 TPJ                 QLN
    2       12605           MS              GOC                     TPJ                 PDKT                KKDI
    3       12631           MS              TEN                     ICG                 TPJ                 TEN
    3       12654           TPJ             KKPM                    ALU                 PNDM                MS

Station_List содержит (700+) коды и названия станций.

Station_List

    StationCode     StationName
    TDPR            TIRUPADRIPULYUR
    KKDI            Karaikkudi
    PDKT            PUDUKKOTTAI
    ALU             Ariyalur
    MS              Chennai Egmore
    NCJ             Nagerkoil Junction
    PNDM            Pennadam
    QLN             Kollam Junction
    TBM             Tambaram
    TEN             Tirunelveli Junction
    TPJ             Tiruchirappalli Junction
    VM              Villupuram Junction
    KKPM            Kallakudi Plgh
    GOC             Golden Rock

Теперь я хочу назвать коды станций, которые есть в Train_status_new. Итак, у меня есть этот запрос, но я получил дубликаты.

;with stationList as
(
 select StationId, StationCode code, StationName from Station_List st
)
, origin as
(
 select * from StationList st
 join train_Status_New tr
 on st.Code = tr.OriginStation_Name
)
, pre as
(
 select st.StationName, tr.RunId, tr.TrainNumber, tr.PrevStation_Name
 , tr.PrevStation_Act_Arr_Time, tr.PrevStation_Act_Dep_Time, tr.PrevStation_Sch_Arr_Time, tr.PrevStation_Sch_Dep_Time
 from StationList st
 join train_Status_New tr
 on st.Code = tr.PrevStation_Name
)
, cur as
(
 select st.StationName, tr.RunId, tr.TrainNumber, tr.CurrentStation_Name 
 , tr.CurrentStation_Act_Arr_Time, tr.CurrentStation_Act_Dep_Time, tr.CurrentStation_Sch_Arr_Time, tr.CurrentStation_Sch_Dep_Time
 from StationList st
 join train_Status_New tr
 on st.Code = tr.CurrentStation_Name
)
, next as
(
 select st.StationName, tr.RunId, tr.TrainNumber, tr.NextStation_Name 
 , tr.NextStation_Act_Arr_Time, tr.NextStation_Act_Dep_Time, tr.NextStation_Sch_Arr_Time, tr.NextStation_Sch_Dep_Time
 from StationList st
 join train_Status_New tr
 on st.Code = tr.NextStation_Name
)
, dest as
(
 select st.StationName, tr.RunId, tr.TrainNumber, tr.DestinationStation_Name 
 , tr.DestinationStation_Act_Arr_Time, tr.DestinationStation_Act_Dep_Time, tr.DestinationStation_Sch_Arr_Time, tr.DestinationStation_Sch_Dep_Time
 from StationList st
 join train_Status_New tr
 on st.Code = tr.DestinationStation_Name
) 
select distinct o.RunId, o.StationCode, o.RunDate, o.TrainNumber, t.Trainname, o.QueryRunDateTime
 , o.OriginStation_Name   , o.StationName O_StationName 

Например, поезд 6063 имеет пять кодов станций. Таким образом, мой ожидаемый вывод содержит названия станций, которые получены из Station_List.

RunId   TrainNumber OriginStation_Name  Origin_Name     PrevStation_Name        Prev_Name       CurrentStation_Name   Current_Name  NextStation_Name        Next_Name       DestinationStation_Name    Destination_Name
    1       6063                MS      Chennai Egmore      VM              Villupuram Junction         NPM             NagaMalai       TDPR            TIRUPADRIPULYUR                 NCJ           Nagerkoil Junction

FYI:

  1. version: Microsoft SQL Server 2012
  2. Эти таблицы содержат больше строк. Train_Status_new содержит более 25 столбцов в качестве столбца времени. Я не могу добавить это. Потому что они не используются в этих требованиях.
...