0

我在数据库名称中有表“火车延误,有列

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 
4

1 回答 1

0

首先,我将通过添加一个名为 Id 的列来提出一个新结构,因此现在您有 2 个表:

  • 火车(整数 ID,字符串名称)
  • TrainDelay (int Id, int TrainId, int DelayTime, nchar DelayReason

每列火车最多延迟 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

请注意,如果同一列火车有 3 次以上的延误,那么每列火车都会有多个结果,并且记录重复。您可以添加更多连接,但如果您的表很大,它会变得非常慢。

于 2009-11-02T16:55:42.557 回答