如何找到非空的结果?

时间:2010-06-01 07:26:05

标签: sql tsql cursor

我有一个返回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。

1 个答案:

答案 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)