使用以前的非null数据状态



我正试图在数据不可用的地方结转以前的数据状态。

例如,我有这样的数据:

Month   Order   Amount
----------------------
1    Item1   100
1    Item2   200
1    Item3   300
2    NULL    NULL
3    Item4   100
4    NULL    NULL
5    NULL    NULL
6    Item1   100

所以在上面的例子中,我想使用第1个月的信息作为第2个月的结转。此外,由于第3个月的信息可用,因此将其用于第4个月和第5个月。

因此输出如下:

Month   Order   Amount
----------------------
1    Item1   100
1    Item2   200
1    Item3   300
2    Item1   100
2    Item2   200
2    Item3   300
3    Item4   100
4    Item4   100
5    Item4   100
6    Item1   100

您可以使用LEFT JOIN来完成此操作。如果您加入";月份";,您可以确保连接的";月份";具有最高值(到目前为止(并且还具有非NULL";订单";。

SELECT *
FROM      myTable t1
LEFT JOIN myTable t2 ON t2.Month = (SELECT MAX(Month)
FROM myTable
WHERE Month <= t1.Month
AND [Order] IS NOT NULL)

一开始你会得到太多的行,因为";月份";1将给出9行。您还可以通过确保连接的";月份";严格低于

SELECT *
FROM      myTable t1
LEFT JOIN myTable t2 ON t2.Month = (SELECT MAX(Month)
FROM myTable
WHERE Month <= t1.Month
AND [Order] IS NOT NULL)
AND t1.Month > t2.Month

然后你只需要SELECT右边的列:

SELECT t1.Month,
COALESCE(t1.[Order],t2.[Order]) as [Order],
COALESCE(t1.Amount,t2.Amount) as Amount
FROM      myTable t1
LEFT JOIN myTable t2 ON t2.Month = (SELECT MAX(Month)
FROM myTable
WHERE Month <= t1.Month
AND [Order] IS NOT NULL)
AND t1.Month > t2.Month

dbfiddle

最新更新