Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 r2012中的值填充空格_Sql_Sql Server - Fatal编程技术网

用SQL Server r2012中的值填充空格

用SQL Server r2012中的值填充空格,sql,sql-server,Sql,Sql Server,我正在SQL Server 2012中使用SQL查询 我有一个包含以下数据的表格: ID headervalue details ----------------------------- 1 zero testzero 2 testzero1 3 Test testtest1 4 First testfirst1

我正在SQL Server 2012中使用SQL查询

我有一个包含以下数据的表格:

       ID headervalue  details
       -----------------------------
        1  zero         testzero
        2               testzero1
        3  Test         testtest1
        4  First        testfirst1
        5               testfirst2
        6               testfirst3
        7               testfirst4
        8 Second        testSecond1  
我需要如下输出:

       ID headervalue details
        1  zero       testzero
        2  zero       testzero1
        3  Test       testtest1
        4  First      testfirst1 
        5  First      testfirst2
        6  First      testfirst3
        7  First      testfirst4 
        8 Second      testSecond1 
如何将空白空间替换为现有值?

有人能帮忙吗?

使用:

测试数据:

DECLARE @t TABLE
(ID int, headervalue varchar(10),   details varchar(30))
INSERT @t VALUES
(1, 'zero', 'testzero'),
(2, '', 'testzero1'),
(3, 'Test', 'testtest1'),
(4, 'First', 'testfirst1'),
(5, '', 'testfirst2'),
(6, '', 'testfirst3'),
(7, '', 'testfirst4'),
(8, 'Second', 'testSecond1')
查询:

SELECT t.id, x.headervalue, t.details 
FROM @t t
CROSS APPLY
  (
     SELECT top 1
       headervalue
     FROM @t
     WHERE
       headervalue <> '' 
       and id <= t.id
     ORDER BY id DESC) x

您可以使用窗口功能来执行此操作:

SELECT ID, MAX(headervalue) OVER (PARTITION BY grp), details
FROM (
SELECT ID, headervalue, details,
       SUM(CASE WHEN headervalue <> '' THEN 1 ELSE 0 END) OVER (ORDER BY ID) AS grp
FROM mytable ) AS t
因此,
grp
帮助我们识别“命名相同”的组
headervalue
记录。在这些记录切片上应用
MAX
可以得到
headervalue
per
grp
切片的预期结果


为什么
testzero
变成
testzero1
testzero1
变成
testzero2
SELECT ID, MAX(headervalue) OVER (PARTITION BY grp), details
FROM (
SELECT ID, headervalue, details,
       SUM(CASE WHEN headervalue <> '' THEN 1 ELSE 0 END) OVER (ORDER BY ID) AS grp
FROM mytable ) AS t
SELECT ID, headervalue, details,
       SUM(CASE WHEN headervalue <> '' THEN 1 ELSE 0 END) OVER (ORDER BY ID) AS grp
FROM mytable
ID  headervalue details     grp
--------------------------------
1   zero        testzero    1
2               testzero1   1
3   Test        testtest1   2
4   First       testfirst1  3
5               testfirst2  3
6               testfirst3  3
7               testfirst4  3
8   Second      testSecond1 4