我想更新下表,其中名稱為空,以重復前 10 行的模式。 在此處輸入影像描述
sql:
宣告 @name varchar(255) set @name = select distinct name from #temp update #temp set name = @name where name is not null
顯然,由于多個值,上述查詢將不起作用。我想更新它為空的表格以填充上面的模式。
uj5u.com熱心網友回復:
雖然我同意 Damien 的建議,即不要將資料庫和電子表格混為一談,但您可以使用視窗函式和模運算子輕松做到這一點:
WITH x AS
(
SELECT dt,
name,
seq = ROW_NUMBER() OVER (ORDER BY dt),
c = COUNT(*) OVER()
FROM #temp
WHERE name IS NOT NULL
),
y AS
(
SELECT dt,
name,
seq = ROW_NUMBER() OVER (ORDER BY dt)
FROM #temp WHERE dt > (SELECT MAX(dt) FROM x)
)
UPDATE y SET y.name = x.name
FROM x INNER JOIN y
ON x.seq % x.c = y.seq % x.c;
這個小提琴中的作業示例。
但是,這并不能驗證非 null 值在開始時都是連續的 - 如果您需要查詢來驗證這一點,那么它要復雜得多。
uj5u.com熱心網友回復:
我只是根據您的圖片發布答案。
我認為如果你想在其他地方使用它,那么你應該改變它。(不是通用的)
update
t1
set
t1.name = t2.name
from
(
select *,row_number() over (order by dt) - 1 as rn
from
(
select
*
from
tbl1
where
name is not null
)
as a
)
as t1
inner join
(
select
name,
day,
mod(rn, 10) as rn
from
(
select *,row_number() over (order by dt) - 1 as rn
from
(
select
*
from
tbl1
where
name is null
)
as b
)
as tmp
)
as t2
on t1.day = t2.day
and t1.rn = t2.rn
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530026.html
標籤:sql服务器
下一篇:如何在字串中使用字符'#?