将MS SQL ISNULL()与Alias一起使用

时间:2011-09-05 07:41:27

标签: sql-server-2005

我有两列(比如x和y)我需要排序x,但如果x为null则按y排序。

对于这个要求,我正在使用

按isnull(x,y)asc;

排序

这似乎与列名一起使用,但如果我使用别名,则MS SQL无法处理列名并抛出无效的列名异常。

因此,有人可以告诉我

如何将ISNULL与别名一起使用? 或者如果有任何替代ISNULL()??

感谢

2 个答案:

答案 0 :(得分:1)

COALESCEISNULL的更标准替代品。

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)