代码之家  ›  专栏  ›  技术社区  ›  hatemGamil

SQL问题:如何将多个结果转换为单行?

  •  0
  • hatemGamil  · 技术社区  · 16 年前

    train number(int),
    DelayTime(int),
    DelayReason(nchar)
    

    trainnumber,Delaytime,DelayReason
    1          ,5 sec    ,x
    1          ,10 sec    ,Z
    1          ,70 sec    ,TY
    

    trainnumber, delaytime 1,delay reason 1 ,delaytime 2, delay reason 2,delaytime 3,delay reason 3
    

    select delaytime from dbo.traindelay
    

    但输出如下:

    Delaytime
    5
    10
    70
    

    delaytime1 ,delaytime2 ,delaytime3 
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   Manitra Andriamitondra    16 年前

    首先,我将通过添加一个名为Id的列来提出一个新的结构,这样现在你就有了2个表:

    每列火车最多有3个延迟的SQL查询是:

    select 
      t.Name, 
      d1.DelayTime   as Delay1, 
      d1.DelayReason as Reason1,
      d2.DelayTime   as Delay2, 
      d2.DelayReason as Reason2,
      d3.DelayTime   as Delay3, 
      d3.DelayReason as Reason3,
    from Train as t
    left join TrainDelay as d1 on d1.TrainId = t.Id 
    left join TrainDelay as d2 on d2.TrainId = t.Id and d2.Id > d1.Id
    left join TrainDelay as d3 on d3.TrainId = t.Id and d3.Id > d2.Id