Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于一行中的列值添加列_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 基于一行中的列值添加列

Sql 基于一行中的列值添加列,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我在这张表中列出了以下数据 user Date Dist Start 1 2014-09-03 150 12500 1 2014-09-04 220 null 1 2014-09-05 100 null 2 2014-09-03 290 18000 2 2014-09-04 90 null 2 2014-0

我在这张表中列出了以下数据

user     Date        Dist     Start
 1     2014-09-03     150       12500
 1     2014-09-04     220       null
 1     2014-09-05     100       null
 2     2014-09-03     290       18000
 2     2014-09-04     90        null
 2     2014-09-05     170       null
根据Start列中的值,我需要添加另一列,如果同一用户的值不为null,则重复该值 结果表应如下所示

 user     Date        Dist     Start            StartR
 1     2014-09-03     150       12500          12500
 1     2014-09-04     220       null           12500
 1     2014-09-05     100       null           12500
 2     2014-09-03     290       18000          18000
 2     2014-09-04     90        null           18000
 2     2014-09-05     170       null           18000

有人能帮我解答这个问题吗?因为我不知道如何对您拥有的数据执行此操作,所以您可以使用窗口功能:

select t.*, min(t.start) over (partition by user) as StartR
from table t
您可以使用相同的想法随时进行更新:

with toupdate as (
      select t.*, min(t.start) over (partition by user) as new_StartR
      from table t
     )
update toupdate
    set StartR = new_StartR;

注意:这适用于问题中的数据以及您如何表述问题。如果给定的
用户有多个
Start
值,或者在第一个非空
Start
值之前有
NULL
值,则此操作不起作用。

您可以使用
合并
/
ISNULL
和相关子查询:

SELECT [user], [Date], [Dist], [Start],
       StartR = ISNULL([Start], (SELECT MIN([Start])
                                 FROM dbo.TableName t2
                                 WHERE t.[User] = t2.[User]
                                 AND  t2.[Start] IS NOT NULL))
FROM dbo.TableName t

我使用了
MIN([Start])
,因为您没有说如果一个用户的多个
Start
值不是
NULL

您真的需要另一个表还是只需要一个查询?我没有任何问题,但我想要一个查询