sql - 查找多列的第一个非空值

标签 sql sql-server

我正在尝试获取一组多列中的第一个非空值。我知道我可以使用每列的子查询来完成此操作。以性能的名义(在这种情况下确实很重要),我想一次性完成此操作。

采用以下示例数据:

col1     col2     col3     sortCol
====================================
NULL     4        8        1
1        NULL     0        2
5        7        NULL     3

我梦想的查询将找到每个数据列中的第一个非空值,并按 sortCol 排序。

例如,选择前三列的神奇聚合时,按 sortCol 降序排序。

col1     col2     col3
========================
5        7         0

或者按升序排序时:

col1     col2     col3
========================
1        4         8

有人知道解决办法吗?

最佳答案

在拒绝该解决方案之前,您是否实际对其进行了性能测试?

SELECT
    (SELECT TOP(1) col1 FROM Table1 WHERE col1 IS NOT NULL ORDER BY SortCol) AS col1,
    (SELECT TOP(1) col2 FROM Table1 WHERE col2 IS NOT NULL ORDER BY SortCol) AS col2,
    (SELECT TOP(1) col3 FROM Table1 WHERE col3 IS NOT NULL ORDER BY SortCol) AS col3

如果速度很慢,可能是因为您没有合适的索引。你有什么指标?

关于sql - 查找多列的第一个非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2045288/

相关文章:

SQL 最大参数

mysql - 在 mysql 中选择相似的值(有些东西,有些东西,有些东西,有些东西应该是一样的)

Android cursor.getColumnNames() 不包含新添加的列

sql-server - 在 BizTalk 中使用存储过程插入/更新 SQL Server 表

sql - 一个简单但具有挑战性的 SQL 问题,至少我找不到出路,只能在外部进行 (c#)

时间:2019-03-17 标签:c#SQLCOMMAND给出错误

sql - ODCIAggregateMerge 没有 parallel_enabled

php - Symfony 查询错误 : Expected Literal, 得到 '"'

sql - 使用包含特定值的列进行分组

sql-server - 在 ADO.NET 中使用 SQLXML,谁需要处理?