我有一个返回 2+ 行的查询。在这些结果中有一列,我们现在可以将其称为 columnX。让我们看看这些示例结果:
列X
100
86
85
70
空
空
例如,我得到 6 行,其中一些为空,一些不为空。现在我想浏览这些结果,并在找到 <>
的行后立即停止。无效的。我怎样才能做到这一点?
事实是,它总是这样排序的。因此,如果存在空值,则它们位于底部。这可能是一个结果:
列X
100
86
85
70
空
空
还有这个:
列X
100
86
85
70
所以可以有空也可以没有,无论如何,我想找到第一个非空行,在上面的例子中是70。我认为 CTE 是一个很好的开始……但仍然缺少一些东西。这就是我获取这些行的方式:
select columnx from mytable where someid = 12345
所以 x 列中的数字都属于一起(因为 someid)。我确实必须从该结果中获取第一个非空行。我不能只查找整个列中不为空的第一行,我必须在之前使用一个条件(其中 someid = 12345)。 70只是一个例子,它也可以是90,所以我无法从结果中得到最小值。空值始终位于底部,其余部分可以不排序。这也可能是一个结果:
列X
100
23
80
78
空
空
在这种情况下我想要 78。
最佳答案
我将使用 CTE(通用表表达式)在列旁边提取索引(使用 ROW_NUMBER
函数)。
然后,您可以使用嵌套的 select
来查找最小空索引,然后选择低于该索引的所有内容。
WITH cteMyTable AS
(
SELECT RUW_NUMBER() OVER (ORDER BY (ColZ) as [Rank], ColumnX
FROM MyTable
)
SELECT [Rank], ColumnX
FROM cteMyTable WHERE [Rank] <
(SELECT MIN([Rank]) FROM cteMyTable WHERE ColumnX IS NULL)
根据您的进一步信息进行编辑,如果您只想要 ColumnX 为最小值的所有行,您可以执行以下操作:
SELECT *
FROM MyTable
WHERE ColumnX = (SELECT MIN(ColumnX) FROM MyTable)
关于sql - 如何找到不为空的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947928/