我在这张表中包含以下数据
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 Column中的值,我需要添加另一列,如果不为同一用户的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
有人可以帮我解决这个问题吗?因为我不知道我该怎么做
答案 0 :(得分:1)
对于您拥有的数据,您可以使用窗口功能:
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
有多个user
值,或者在第一个非NULL NULL
值之前要保留Start
个值,则无效
答案 1 :(得分:1)
您可以使用COALESCE
/ 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
,则说明会发生什么。