Sql 如何创建一个视图,将源表中一条记录的数据拆分为视图中最多三条记录?

Sql 如何创建一个视图,将源表中一条记录的数据拆分为视图中最多三条记录?,sql,Sql,我正在尝试在SQLServer2000中创建一个视图,该视图将数据从源表拆分为单个记录。源表如下所示: ShipID,AirlineID,Airport1,Airport2,AirlineID2,Airport3,Airport4,AirlineID3,Airport5,Airport6 我的观点应该是这样的: 船号、航空公司、始发地、目的地 SELECT shipid, airlineid, airport1, 'ORIGIN' FROM flight UNION SELECT shipid,

我正在尝试在SQLServer2000中创建一个视图,该视图将数据从源表拆分为单个记录。源表如下所示:

ShipID,AirlineID,Airport1,Airport2,AirlineID2,Airport3,Airport4,AirlineID3,Airport5,Airport6

我的观点应该是这样的:

船号、航空公司、始发地、目的地

SELECT shipid, airlineid, airport1, 'ORIGIN' FROM flight
UNION
SELECT shipid, airlineid, airport2, 'DESTINATION' FROM flight
因此,我的视图需要将每个源记录拆分为视图中最多三个记录


有人知道如何最好地做到这一点吗?

一般来说,您会使用它们之间的联合进行一些查询,例如,机场2是否始终是目的地

SELECT shipid, airlineid, airport1, 'ORIGIN' FROM flight
UNION
SELECT shipid, airlineid, airport2, 'DESTINATION' FROM flight

这将为名为flight的表中的每一行获取两条记录。但是,您必须提供更多关于各个列中的内容以及希望输出的行的信息,特别是如果这些行是用空格填充的,或者如果不使用,则为NULL。并说出您正在使用的产品(MySql、Sql Server、Oracle、Access、Postgres、sticks和napkins等)。试着阅读一些其他标记为“Sql”的帖子,看看人们通过数据包含了哪些内容。

这应该会让您找到自己的方法。思想增加了列转移。它允许您按时间线对航班进行排序

select ShipID, 1 Transfer, AirlineID, Airport1 Origin, Airport2 Destination
  from mySourceTable
 where Airport1 is not null
union all
select ShipID, 2, AirlineID2, Airport3, Airport4 
  from mySourceTable
 where Airport3 is not null
union all
select ShipID, 3, AirlineID3, Airport5, Airport6 
  from mySourceTable
 where Airport5 is not null
order by 1, 2

你从哪里得到出发地和目的地?谢谢莱文的回复。我使用的是SQL Server 2000,shipid和airline将包含整数。shipid、airlineid(第一个)、airport1和airport2都不会为空,其他所有的都可以为空,如果是这样的话,视图应该没有行。谢谢,这两个帖子帮了大忙!如果我有更多的问题,我会测试它并重新发布