我有两列(比如x和y)我需要排序x,但如果x为null则按y排序。
对于这个要求,我正在使用
按isnull(x,y)asc;
排序这似乎与列名一起使用,但如果我使用别名,则MS SQL无法处理列名并抛出无效的列名异常。
因此,有人可以告诉我
如何将ISNULL与别名一起使用? 或者如果有任何替代ISNULL()??
感谢
答案 0 :(得分:1)
COALESCE
是ISNULL
的更标准替代品。
与ISNULL
相比,它可能需要两个以上的值,并从左侧返回第一个非空值。
您不能在ORDER BY中的函数内引用别名
您有两种选择:
1)使用列名而不是别名(已经完成)
2)使用选择中的isnull(x,y) as xy
并按顺序通过
例如
select a as a-alias, b as b-alias, c as c-alias, x as x alias, y as y-alias, c as c-alias
,isnull(x-alias, y-alias) xy
from table
where conditions
order by xy
答案 1 :(得分:0)
这不起作用
select Col1 as C1, Col2 as C2
from YourTable
order by isnull(C1, C2)
如果要使用表别名,则必须在子查询中嵌入查询。
select *
from (
select Col1 as C1, Col2 as C2
from YourTable
) as Y
order by isnull(Y.C1, Y.C2)
或使用列名而不是别名。
select Col1 as C1, Col2 as C2
from YourTable
order by isnull(Col1, Col2)
修改强>
如果您只想将Col1作为输出,则可以使用这些选项
select Y.C1
from (
select Col1 as C1, Col2 as C2
from YourTable
) as Y
order by isnull(Y.C1, Y.C2)
select Col1 as C1
from YourTable
order by isnull(Col1, Col2)