我在接受采访时得到了一个问题。寻找解决方案
问题:我在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
任何人都可以帮助我获得此输出吗?
提前致谢
答案 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)