在SQL Serve r2012中填入空白值

时间:2015-10-05 14:38:22

标签: sql sql-server

我在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 

如何用现有值替换空格?

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

使用CROSS APPLY

测试数据:

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

结果:

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

答案 1 :(得分:1)

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

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

因此,grp可帮助我们识别“即将命名的相同”headervalue条记录的组。将MAX应用于这些记录片段可为headervaluegrp个切片提供预期结果。

Demo here