用于显示最大非空字段数记录的SQL查询

用于显示最大非空字段数记录的SQL查询,sql,Sql,我正在寻找一个查询/一组SQL查询,它将为我提供记录ID,该记录具有“最大数量的非空/非空字段”。 我正在研究count()和max()函数,但它们似乎在解决同一列的问题,而不是同一行的问题(这正是我要寻找的) 请提供帮助。您可以通过订购非空字段的数量: select top 1 Record_ID from YourTable order by case when isnull(col1,'') <> '' then 1 else 0 end +

我正在寻找一个查询/一组SQL查询,它将为我提供记录ID,该记录具有“最大数量的非空/非空字段”。
我正在研究
count()
max()
函数,但它们似乎在解决同一列的问题,而不是同一行的问题(这正是我要寻找的)


请提供帮助。

您可以通过订购非空字段的数量:

select  top 1 Record_ID
from    YourTable
order by
        case when isnull(col1,'') <> '' then 1 else 0 end +
        case when isnull(col2,'') <> '' then 1 else 0 end +
        case when isnull(col3,'') <> '' then 1 else 0 end +
        ...
        case when isnull(colN,'') <> '' then 1 else 0 end
选择前1条记录\u ID
从你的桌子上
订购人
当isnull(col1,“)”时,则为1,否则为0结束+
当isnull(col2,“”)时,则为1,否则为0结束+
当isnull(col3,“”)时,则为1,否则为0结束+
...
当isnull(colN,“”)时,则为1,否则为0结束

这是SQL Server语法。如果您使用的是其他数据库,请修改您的问题。

谢谢Andomar,您的回答非常准确。因为我使用的是sqllite数据库,所以我必须将isnull改为ifnull(),将top 1改为LIMIT 1。但是,如果我必须在不同的数据库中执行此操作,那么我想知道是否可以存储非空字段数的值,以便比较它们并选择赢家。那Andromar呢?我想出了一个解决办法..使用UNION关键字,我将所有必需的记录插入到同一个(临时)表中,然后执行此查询。我添加了一个常量字段来确定胜利者来自哪个数据库(两个数据库中可能都有相同的记录ID,所以这是必需的)。用这两个,我算出了赢家。非常感谢你们的帮助。