我在面试中有个问题。寻找解决方案
问题:我在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有人能帮我得到这个输出吗?
提前感谢
发布于 2018-05-26 13:26:46
我希望您希望从非零的所有列中获取第一次记录的位置。有个诡计。不推荐生产。
编辑(来自)如果表具有聚集索引,则解决方案将无法工作;如果数据库有多个文件,则可能无法工作。
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)发布于 2018-05-26 13:21:53
假设您的表名为tableA,列名为A、B、C、D,则查询如下
SELECT DISTINCT A,B, C,D FROM tableA请通过W3School阅读基本的SQL server,这将是有帮助的。
https://stackoverflow.com/questions/50543140
复制相似问题