Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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 Server 2008中所有为空的行_Sql_Sql Server_Null - Fatal编程技术网

如何将一行值移动到另一行并删除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。希望我已经回答了你的问题。。是的,以上两个问题都是我提出的。