我当前的表格输出是
---------------------------------------------------
| id col1 col2 |
---------------------------------------------------
| 1 | test1 | 1 |
| 2 | test11 | 0 |
| 3 | test12 | 0 |
| 4 | test13 | 0 |
| 5 | test14 | 0 |
| 6 | test2 | 2 |
| 7 | test21 | 0 |
| 8 | test22 | 0 |
| 9 | test23 | 0 |
| 10 | test24 | 0 |
---------------------------------------------------
预期输出
---------------------------------------------------
| id col1 col2 |
---------------------------------------------------
| 1 | test1 | 1 |
| 2 | test11 | 1 |
| 3 | test12 | 1 |
| 4 | test13 | 1 |
| 5 | test14 | 1 |
| 6 | test2 | 2 |
| 7 | test21 | 2 |
| 8 | test22 | 2 |
| 9 | test23 | 2 |
| 10 | test24 | 2 |
---------------------------------------------------
没有光标可以吗?有没有办法在当前行值为0的情况下将顶行值添加到当前行值?
答案 0 :(得分:4)
您可以找到col2
的最后一个非零值,如:
select id
, col1
, (
select top 1 col2
from YourTable yt2
where yt2.id <= yt1.id
and yt2.col2 <> 0
order by
yt2.id desc
)
from YourTable yt1
答案 1 :(得分:0)
看起来你不是在追求一笔钱。这应该在2005年或以后工作:
DECLARE @tmp TABLE
(
id INT PRIMARY KEY
, col1 VARCHAR(20)
, col2 INT
);
INSERT @tmp
VALUES
(1, 'test1', 1)
, (2, 'test11', 0)
, (3, 'test12', 0)
, (4, 'test13', 0)
, (5, 'test14', 0)
, (6, 'test2', 2)
, (7, 'test21', 0)
, (8, 'test22', 0)
, (9, 'test23', 0)
, (10, 'test24', 0);
SELECT
t1.id
, t1.col1
, CASE t1.col2
WHEN 0
THEN t2.col2
ELSE
t1.col2
END col2
FROM
@tmp t1
OUTER APPLY
(
SELECT
TOP 1 col2
FROM
@tmp t3
WHERE
t3.id <= t1.id
AND
t3.col2 > 0
ORDER BY
t3.id DESC
) t2