我有一个返回2行以上的查询。在这些结果中,我们现在可以调用 columnX 。让我们看一下这些示例结果:
columnX
100个
86个
85个
70个
空
空
我得到6行,例如,其中一些是null,其中一些不是null。现在我想查看这些结果,并在找到<>
null的行时立即停止。我怎么能这样做?
事情是,它始终按此方式排序。因此,如果存在空值,则它们位于底部。这可能是一个结果:
columnX
100个
86个
85个
70个
空
空
这也是:
columnX
100个
86个
85个
70
所以可以有空或无,在任何情况下,我想找到第一个非空行,在上面的例子中为70。我认为CTE是一个不错的开始......但仍然缺少某些东西。这就是我获取这些行的方式:
select columnx from mytable where someid = 12345
所以columnx中的数字都属于一起(因为someid)。我真的必须得到该结果中的第一个非空行。我不能只查找整个columnx中非空的第一行,我必须使用一个条件(其中someid = 12345)。 70只是一个例子,它也可以是90,所以我不能从结果中得到最小值。空值总是在底部,其余的可以是未排序的。这也可能是结果:
columnX
100个
23个
80个
78个
空
空
在那种情况下,我想要78。
答案 0 :(得分:3)
我会使用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)