如何在 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
下面有一个示例 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