左外部联接消除了2行,而不是插入NULL

时间:2020-03-30 19:22:06

标签: sql-server tsql sql-server-2012

如果缺少时间,我希望该行/列中为NULL,而不是完全不显示。我之前使用过几次左外部联接,但没有遇到任何问题。

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

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

不用担心列而不是行。稍后我将弄清楚如何进行调整。只要没有数据丢失,此示例数据就可以从较早的查询中正常工作(并根据需要提供列数据)。问题(如此处所示)是数据丢失时的情况。

1 个答案:

答案 0 :(得分:0)

您实际上可以使用PIVOT进行此操作。在您将PIVOT固定到固定列的情况下,如果没有数据,则应返回NULL。

检查此页以获得有关PIVOT的帮助:Efficiently convert rows to columns in sql server

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;