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
,您真的需要另一个表还是只需要一个查询?我没有任何问题,但我想要一个查询