用SQL Server r2012中的值填充空格
我正在SQL Server 2012中使用SQL查询 我有一个包含以下数据的表格:用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
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
pergrp
切片的预期结果
为什么
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