sql - 如何在列中找到连续的零?

标签 sql sql-server database loops sql-server-2008

如何在列中找到连续的零数 (0) 并在找到非零时停止。然后我需要用非零数替换所有的零。

  1. 将按第 1 列进行分组
  2. 在我们得到一个非零值后,例如 - ABC,将其上方的所有值替换为该非零值。
  3. 组内的排列将按日期降序排列。

请告诉我如何用非零数字更新零值。 enter image description here

最佳答案

试试这个

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

这是输出

enter image description here

程序逻辑:

  • 它根据 Col2 和 col3 为每个 Col1 创建一个序列。
  • 对于 Col2 为 0 的每条记录,它会在同一个表中查找在 col1 中具有相同值且 Rank = 1 的记录(Rank 1 将是值 <> 0 的记录)
  • 如果根据上述找到匹配项,则显示匹配值,否则显示列中的值

关于sql - 如何在列中找到连续的零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47811798/

相关文章:

database - VB.Net 数据库的安全密码?

php - 保存 PHP 应用程序设置的最佳方法是什么?

sql - 选择每组的最大值

sql - MS SQL Server 2005 - 存储过程 "Spontaneously Breaks"

c# - 优化 NHibernate 生成的 SQL

sql - 如何防止数据库触发器递归?

sql - SQL "DELETE"语句后跟 "WHERE NOT IN"语句可以在同一个事务中吗?

sql - 如何在 Psql 输出中隐藏结果集装饰

mysql 字段值应该大于零

c# - 有条件的 Linq 外连接