如何在列中找到连续的零数 (0) 并在找到非零时停止。然后我需要用非零数替换所有的零。
- 将按第 1 列进行分组
- 在我们得到一个非零值后,例如 - ABC,将其上方的所有值替换为该非零值。
- 组内的排列将按日期降序排列。
最佳答案
试试这个
DECLARE @T TABLE
(
Col1 VARCHAR(5),
Col2 INT,
Col3 DATE
)
INSERT INTO @T
values( 'ABC',0,'01-01-2017'),('ABC',0,'01-01-2017'),('ABC',0,'01-01-2014'),('ABC',3,'01-01-2013'),
('DEF',0,'01-01-2017'),('DEF',2,'01-01-2017'),('DEF',0,'01-01-2014')
;WITH CTE
AS
(
SELECT
SeqNo = ROW_NUMBER() OVER(PARTITION BY Col1 ORDER BY Col2,Col3),
RN = ROW_NUMBER() OVER(PARTITION BY Col1 ORDER BY Col2 DESC),
*
FROM @T
)
SELECT
T1.Col1,
NewCol2 = ISNULL(T2.Col2,T1.Col2),
OldCol2 = T1.Col2,
T1.Col3
FROM CTE T1
LEFT JOIN CTE T2
ON T1.Col1 = t2.Col1
AND T1.Col2 = 0
AND T2.RN =1
这是输出
程序逻辑:
- 它根据 Col2 和 col3 为每个 Col1 创建一个序列。
- 对于 Col2 为 0 的每条记录,它会在同一个表中查找在 col1 中具有相同值且 Rank = 1 的记录(Rank 1 将是值 <> 0 的记录)
- 如果根据上述找到匹配项,则显示匹配值,否则显示列中的值
关于sql - 如何在列中找到连续的零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47811798/