我正在尝试获取一组多列中的第一个非空值。我知道我可以使用每列的子查询来完成此操作。以性能的名义(在这种情况下确实很重要),我想一次性完成此操作。
采用以下示例数据:
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/