【问题标题】:How to get First not zero value in table column in SQL Server如何在 SQL Server 的表列中获取第一个非零值
【发布时间】:2022-01-03 23:08:06
【问题描述】:

我在下面有一个示例表。从那张表#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 我将我的专栏作为数据仅用于示例目的。
  • 这并没有改变我的观点。用 1 列,你想要什么是不可能的。
  • 表中的数据是无序的。您显示 0、0、0、0、0、23、524,但这与 0、0、524、0、0、23、0 或任何其他顺序相同。这就是拉努所说的。您的任务是指一个不存在的订单。

标签: sql sql-server tsql


【解决方案1】:

正如@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 2019-03-11
    • 2019-03-09
    • 2020-04-08
    • 2021-01-04
    • 2023-02-18
    相关资源
    最近更新 更多