如何在 SQL 服务器的 table 列中获取第一个非零值

How to get First not zero value in table column in SQL Server

下面有一个示例 table。从那个 table #A 我需要如下所示。基本上我想从第一行而不是零行获取数据。如果在那之后出现任何零都没有问题。

CREATE TABLE #A
(
    [Data] int
)

INSERT INTO #A 
VALUES (0), (0), (0), (0), (0),
       (23), (524), (723), (0), (89),
       (23), (4), (51), (0), (0)

SELECT * FROM #A

所需输出:

Data
-------
 23
524
723
  0
 89
 23
  4
 51
  0
  0

我尝试了以下脚本,但我的数据列本身正在排序。哪个不能正常工作。

SELECT *
FROM 
    (SELECT 
         *,
         ROW_NUMBER() OVER (ORDER BY data) Rn
     FROM
         #A) t

正如@Larnu 提到的:没有正确的顺序,就没有所需顺序的 GTD。

看看Unordered results in SQL

注意我添加了一个 ID,它可以是 IDENTITY 甚至是日期时间戳

例子

Create table #A
                (
                  id int,[Data] int
                )

                insert into #A values(1,0),
                                     (2,0),
                                     (3,0),
                                     (4,0),
                                     (5,0),
                                     (6,23),
                                     (7,524),
                                     (8,723),
                                     (9,0),
                                     (10,89),
                                     (11,23),
                                     (12,4),
                                     (13,51),
                                     (14,0),
                                     (15,0)

选项 1:

Select *
 From  #A
 Where ID>= (Select top 1 id From  #A where data<>0 Order By ID )
 Order by ID

选项 2:

Select id
      ,data
 From (
         Select * 
               ,Flg = sum(case when Data<>0 then 1 else 0 end) over (order by id)
          from #A
      ) A
 Where Flg>0 
 Order By ID

结果

id  data
6   23
7   524
8   723
9   0
10  89
11  23
12  4
13  51
14  0
15  0