sql - 如何找到不为空的结果?

标签 sql t-sql cursor

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

相关文章:

c# - 该类型不具有 EdmEntityTypeAttribute 属性,但包含在具有 EdmSchemaAttribute 属性的程序集中

sql-server - 在仅附加表中设置版本列

c# - SqlCommand.Parameters.AddWithValue 未返回正确结果

sql-server - 如何优化 T-SQL 存储过程以搜索源表并将新记录插入目标表

java - 确定当前光标的大小

Jquery - 文件输入上的光标指针,可能吗?

mysql - 在 mysql 上声明游标错误 "error in your SQL syntax"

sql - 创建由两个不同日期和项目给出的日期的递归列表

mysql - mySQL 中完全外连接的计数

sql - 将 mysql 数据库值从几列转移到条目行