我正试图在数据不可用的地方结转以前的数据状态。
例如,我有这样的数据:
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