我试图在一组很多列中获取第一个非空值.我知道我可以使用每列的子查询来完成此操作.以表演的名义,在这种情况下真的算不算,我想在单程中做到这一点.
以下列举数据:
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
如果这很慢,可能是因为你没有适当的索引.你有什么索引?