删除SQL Server中的初始0记录

时间:2018-05-26 13:12:42

标签: sql-server

我在接受采访时得到了一个问题。寻找解决方案

问题:我在SQL Server中有一个表,其中有4列,其中前几个记录为0,它们所需的输出是删除前0个记录,但不是那些在自然数之后出现的0记录。最初的0条记录可以是动态的。我提到输入表和输出表。

表:

A   B   C   D
-------------
0   0   0   0
0   0   0   0
0   0   0   0
0   0   0   0
0   0   0   0
0   0   0   0
1   2   3   4
0   0   0   0
5   6   7   8
2   3   5   6
1   3   4   5

输出表:

A   B   C   D
-------------
1   2   3   4
0   0   0   0
5   6   7   8
2   3   5   6
1   3   4   5

任何人都可以帮助我获得此输出吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

假设您的表名为 tableA 且列名为 A,B,C,D 所以查询将是

SELECT DISTINCT A,B, C,D FROM tableA

请通过W3School阅读基本的SQL服务器,这将有所帮助。

答案 1 :(得分:0)

我希望您想要获取非零中所有列的第一条记录。 有一个技巧。不推荐用于生产。

编辑(来自Dan)如果表具有聚簇索引,则该解决方案将无效,如果数据库包含多个文件,则该解决方案可能无效。

CREATE TABLE test23
(
     A INT 
    ,B INT 
    ,C INT 
    ,D INT
)
GO

INSERT INTO test23 VALUES
(0,0,0,0),
(0,0,0,0),
(0,0,0,0),
(0,0,0,0),
(0,0,0,0),
(0,0,0,0),
(1,2,3,4),
(0,0,0,0),
(5,6,7,8),
(2,3,5,6),
(1,3,4,5)
GO

SELECT * 
       FROM
test23 
        WHERE  %%PhysLoc%% >= 
        (
            SELECT MIN(%%PhysLoc%%) FROM test23 WHERE a+b+c+d > 0
        )

<强>输出

A           B           C           D
----------- ----------- ----------- -----------
1           2           3           4
0           0           0           0
5           6           7           8
2           3           5           6
1           3           4           5

(5 rows affected)