Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 左外部联接消除2行而不是插入NULL_Sql Server_Tsql_Sql Server 2012 - Fatal编程技术网

Sql server 左外部联接消除2行而不是插入NULL

Sql server 左外部联接消除2行而不是插入NULL,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,如果缺少时间,我希望该行/列中为NULL,而不是它根本不显示。我以前使用过几次左外连接,都没有问题 如果我从具有4种状态的表开始: SELECT Status FROM flight; Status OUT OFF ON IN 到目前为止还不错。现在我想用所有的数据左外连接表 SELECT [Status], [time] FROM flight left outer join FlightTime on (FlightTime.StatusId=flight.FlightTimeStatu

如果缺少时间,我希望该行/列中为NULL,而不是它根本不显示。我以前使用过几次左外连接,都没有问题

如果我从具有4种状态的表开始:

SELECT Status FROM flight;
Status
OUT
OFF
ON
IN

到目前为止还不错。现在我想用所有的数据左外连接表

SELECT [Status], [time] FROM flight
left outer join FlightTime on (FlightTime.StatusId=flight.FlightTimeStatusId)
Status   Time
OUT      2020-03-10 19:23:00.000
IN       2020-03-10 22:15:00.000
预期结果:

Status   Time
OUT      2020-03-10 19:23:00.000
OFF      NULL
ON       NULL
IN       2020-03-10 22:15:00.000
样本OOOI数据

Flight OUT                      OFF                     ON                      IN
0001   2020-02-07 15:15:00.000  2020-02-07 15:53:00.000 2020-02-07 20:17:00.000 2020-02-07 20:20:00.000
0002   2020-02-14 16:19:00.000  2020-02-14 16:29:00.000 2020-02-14 21:06:00.000 2020-02-14 21:08:00.000

不要担心列而不是行。稍后我将找出如何旋转它。此示例数据来自早期的查询,只要没有数据丢失,该查询就可以正常工作(并根据需要提供列数据)。问题(如图所示)是当数据丢失时。

您实际上可以通过使用PIVOT来做到这一点。在您的情况下,当您转到固定列时,如果没有数据,它应该返回NULL

检查此页面以获取有关PIVOT的帮助:


您的ON子句始终为true。您可以为两个表都包含完整的模式吗?一些示例数据也不会有任何影响。我已经包含了示例数据。我无法包含架构,因为它不是我的数据库。您的
on
条件使用了您未提供的列:
StatusId
FlightTimeStatusId
。请阅读一些关于改进您的问题的提示。
Select * from (
Your query that returns all the data including the [Time] column here
)  f
PIVOT
( 
    max([Time]) for Status in ([OUT], [OFF], [ON], [IN])
) piv;