Sql 使用上面行值中的值自动填充字段

Sql 使用上面行值中的值自动填充字段,sql,sql-server,tsql,row,Sql,Sql Server,Tsql,Row,我想用上面的值自动填充空值 查询 SELECT Nr, [Name] FROM #TEMP 表格: 我希望我的输出如下所示: 谢谢。普遍的共识似乎是,这不是数据库应该做的事情,也不是数据库应该做的事情(如果可以避免的话) 话虽如此,似乎正在尝试做与您相同的事情,并且有一些有效的解决方案。普遍的共识似乎是,这不是数据库打算做的事情,也不应该做的事情(如果可以避免的话) 也就是说,似乎正在尝试做与您相同的事情,并且有一些有效的解决方案。实现这一点的一种方法是使用子查询

我想用上面的值自动填充空值

查询

SELECT 
      Nr,
      [Name]
FROM #TEMP
表格

我希望我的输出如下所示:


谢谢。

普遍的共识似乎是,这不是数据库应该做的事情,也不是数据库应该做的事情(如果可以避免的话)


话虽如此,似乎正在尝试做与您相同的事情,并且有一些有效的解决方案。

普遍的共识似乎是,这不是数据库打算做的事情,也不应该做的事情(如果可以避免的话)


也就是说,似乎正在尝试做与您相同的事情,并且有一些有效的解决方案。

实现这一点的一种方法是使用子查询:

SELECT t1.Nr, Name = (SELECT TOP 1 Name 
                      FROM #temp t2 
                      WHERE Name IS NOT NULL 
                        AND t1.Nr >= t2.Nr
                      ORDER BY Nr DESC)
FROM #temp t1
ORDER BY Nr;

或交叉应用:

SELECT t1.Nr, sub.Name
FROM #temp t1
CROSS APPLY (SELECT TOP 1 Name 
             FROM #temp t2 
             WHERE Name IS NOT NULL 
               AND t1.Nr >= t2.Nr
             ORDER BY Nr DESC) AS sub
ORDER BY Nr;

实现这一点的一种方法是使用子查询:

SELECT t1.Nr, Name = (SELECT TOP 1 Name 
                      FROM #temp t2 
                      WHERE Name IS NOT NULL 
                        AND t1.Nr >= t2.Nr
                      ORDER BY Nr DESC)
FROM #temp t1
ORDER BY Nr;

或交叉应用:

SELECT t1.Nr, sub.Name
FROM #temp t1
CROSS APPLY (SELECT TOP 1 Name 
             FROM #temp t2 
             WHERE Name IS NOT NULL 
               AND t1.Nr >= t2.Nr
             ORDER BY Nr DESC) AS sub
ORDER BY Nr;

您可能是对的,这不应该在数据库中进行,但告诉用户手动输入相同的值要困难得多。我同意。我文章中的第二个链接可能有一个有用的解决方案。如果这是一次性操作,您还可以将数据集导出到Excel,并使用公式生成一系列查询,然后逐行执行这些查询,以更新表格。我发现在这种情况下,这样写通常会更快。你可能是对的,不应该在数据库中这样做,但告诉用户手动输入相同的值要困难得多。我同意。我文章中的第二个链接可能有一个有用的解决方案。如果这是一次性操作,您还可以将数据集导出到Excel,并使用公式生成一系列查询,然后逐行执行这些查询,以更新表格。我发现在这种情况下,这样写通常会更快。如果有5列需要自动填充,您会怎么做?我不想对所有5个字段都进行子查询。@Nils这不是如何工作的。我回答了你最初的问题,你把它标记为答案。现在你取消了我的答案并添加了新的条件。如果你需要进一步的帮助,问新问题。您还应该准备5个空白栏的样本数据来填充+您是对的,我已经标记了您的答案,如果需要,我会问另一个问题。谢谢。如果您有5个栏需要自动填充,您会怎么做?我不想对所有5个字段进行子查询。@Nils这不是工作方式。我回答了你最初的问题,你把它标记为答案。现在你取消了我的答案并添加了新的条件。如果你需要进一步的帮助,问新问题。你还应该准备5个空白栏的样本数据来填充+你是对的,我已经标记了你的答案,如果需要的话,我会问另一个问题谢谢。这个问题没有显示任何研究工作。这个问题没有显示任何研究工作。