如何将一行值移动到另一行并删除SQL Server 2008中所有为空的行
我有一张如下的桌子如何将一行值移动到另一行并删除SQL Server 2008中所有为空的行,sql,sql-server,null,Sql,Sql Server,Null,我有一张如下的桌子 PK DBName API50 CounterValue 1 NULL NULL NULL 2 NULL NULL 1 3 NULL NULL NULL 4 NULL NULL NULL 5 NULL NULL NULL 6 test1 34.5 NULL 7 NULL NULL NULL 8 NULL NULL NULL 9 NULL
PK DBName API50 CounterValue
1 NULL NULL NULL
2 NULL NULL 1
3 NULL NULL NULL
4 NULL NULL NULL
5 NULL NULL NULL
6 test1 34.5 NULL
7 NULL NULL NULL
8 NULL NULL NULL
9 NULL NULL NULL
10 NULL NULL 2
11 test1 38.5 NULL
我希望结果表如下
DBName API50 CounterValue
test1 34.5 1
test1 38.5 2
正如在下面的问题中所回答的那样
Iam正在进行自联接,但它导致未填充计数器值。希望你们能帮助我。提前感谢。如果计数器值总是随着主键的增加而增加
select
DBName,
API50,
(select max(CounterValue) from yourtable t1 where t1.pk <= yourtable.pk)
from yourtable
where DBName is not null
请尝试以下查询:
SELECT DBName,API50,
(SELECT TOP 1
CounterValue
FROM t
WHERE CounterValue is not null
AND PK<=t1.PK
ORDER BY PK DESC
) as CounterValue
FROM t as t1
WHERE DBNAme IS NOT NULL
也可以尝试此查询
**从中选择t.DBName、MAXt.API50作为API50、tt.CounterValue
从JustTest中选择*作为t,其中DBName作为t不为null
,从JustTest中选择*作为tt,其中计数器值不为null tt
按t.DBName、tt.CounterValue分组尝试此查询
select * from @table1
SELECT t1.ID, t1.DBName, t1.API50, t2.CounterValue
FROM @table1 t1
INNER JOIN @table1 t2 ON t1.ID > t2.ID
WHERE t1.DBName IS NOT NULL
AND t2.ID IN (select ID from @table1 where dbname is null and ID < t1.ID)
AND t2.ID > (select ISNULL(MAX(ID),0) from @table1 where dbname is not null and ID < t1.ID)
检查此项规则是什么?是否为每个DBName/API50显示前一个计数器值不为null?当你有很多价值观的时候会发生什么?嗨,谢谢你的关注。将有相同数量的计数器值始终匹配DBName和API50。此外,将首先填充计数器值,然后填充DBName和API50。希望我已经回答了你的问题。。是的,以上两个问题都是我提出的。