1

我需要一些建议。

我在特定时间段的字段中有一个包含空值的列。

Name     Date
-----    -----
Cat      1/1/2012
Dog      1/2/2012
Fish     1/3/2012
NULL     1/4/2012
Goat     1/5/2012
NULL     1/6/2012
Sheep    1/7/2012

在上面的示例中,当列中有空值时,我将如何编写 SQL 语句来选择列 Name 的最后一个已知值?

例如,我希望表格看起来像这样:

Name      Date
-----    -----
Cat        1/1/2012
Dog        1/2/2012
Fish       1/3/2012
Fish       1/4/2012
Goat       1/5/2012
Goat       1/6/2012
Sheep      1/7/2012

这个伪代码会起作用吗?

Select 
isnull(Name, "Select Name from Table where Date = GetDate() - 1")
,Date
From Table
4

1 回答 1

0

试试这个 [v 是原始的,v2 是计算出的新值]:

DECLARE @table table(v varchar(10), d varchar(10))
INSERT INTO @table 
SELECT 'Cat','1/1/2012' UNION
SELECT 'Dog','1/2/2012' UNION
SELECT 'Fish','1/3/2012' UNION
SELECT NULL,'1/4/2012' UNION
SELECT 'Goat','1/5/2012' UNION
SELECT NULL,'1/6/2012' UNION
SELECT 'Sheep','1/7/2012'


SELECT A.v, A.d, ISNULL(A.v,B.v) V2
FROM @table A
OUTER APPLY (   SELECT TOP 1 *
                FROM @table 
                WHERE d < A.d
                AND v IS NOT NULL
                ORDER BY d desc) B
order by d
于 2012-08-22T16:49:04.073 回答