左外连接消除 2 行而不是插入 NULL
Left outer join eliminating 2 rows instead of inserting NULL
如果缺少时间,我希望在 row/column 中显示 NULL,而不是根本不显示。我以前曾多次使用左外连接,但没有遇到任何问题。
如果我从具有 4 个状态的 table 开始:
SELECT Status FROM flight;
Status
OUT
OFF
ON
IN
到目前为止一切顺利。现在我想左外连接 table 和所有数据
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 来做到这一点。在您的情况下,当您 PIVOT 到固定列时,如果没有数据,它应该 return 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;
如果缺少时间,我希望在 row/column 中显示 NULL,而不是根本不显示。我以前曾多次使用左外连接,但没有遇到任何问题。
如果我从具有 4 个状态的 table 开始:
SELECT Status FROM flight;
Status
OUT
OFF
ON
IN
到目前为止一切顺利。现在我想左外连接 table 和所有数据
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 来做到这一点。在您的情况下,当您 PIVOT 到固定列时,如果没有数据,它应该 return 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;