Sql server 2005 将MS SQL ISNULL()与别名一起使用
我有两列(比如x和y),我需要对x进行排序,但如果x为null,则按y排序 对于我使用的这个需求 按isnull(x,y)asc排序 这似乎适用于列名,但如果使用alias,MS SQL将无法计算列名,并抛出无效列名异常 因此,谁能告诉我 我如何将ISNULL与别名一起使用 或者如果有任何替代ISNULL()的方法Sql server 2005 将MS SQL ISNULL()与别名一起使用,sql-server-2005,Sql Server 2005,我有两列(比如x和y),我需要对x进行排序,但如果x为null,则按y排序 对于我使用的这个需求 按isnull(x,y)asc排序 这似乎适用于列名,但如果使用alias,MS SQL将无法计算列名,并抛出无效列名异常 因此,谁能告诉我 我如何将ISNULL与别名一起使用 或者如果有任何替代ISNULL()的方法 谢谢COALESCE是ISNULL更标准的替代方案 与ISNULL相比,它可以接受两个以上的值,并从左侧返回第一个非null值 不能在ORDER BY中引用函数内的别名 您有两个选择
谢谢
COALESCE
是ISNULL
更标准的替代方案
与ISNULL
相比,它可以接受两个以上的值,并从左侧返回第一个非null值
不能在ORDER BY中引用函数内的别名
您有两个选择:
1) 使用列名而不是别名(您已经这样做了)
2) 使用select上的isnull(x,y)作为xy
,并按顺序引用它
例如
这行不通
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)
或者使用列名而不是别名
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)
您能发布您的查询吗?目前,如果我使用order by和alias,它可以很好地工作,但isnull同样失败。@anonymous-是的,这就是我试图解释的。只有在单独使用时,才能在表达式中使用表别名。如果你想按顺序表达,你必须使用原来的列名。是的,我理解,谢谢你的回复,这是一个帮助!我将尝试子查询,但问题是有两列,即x和y,但网页上只显示x。x列中可能有空值,因此要求按x列排序,但如果x为空,则按y排序。在本例中,“order by isNull(x,y)asc工作正常”,在网页上,您将只看到带有Null的col x vals,这非常感谢解决方案。。。它可以从条件order by isnull(x-alias,y-alias)asc-->的表中选择a作为a-alias、b作为b-alias、c作为c-alias、x作为x-alias、y作为y-alias、c作为c-alias。此查询失败,并且如果order by是:order by x-alias asc,则对于同一查询,我会得到一个无效列名或类似的异常,y-alias asc----->此worksOrder by使用列别名,或原始列,但函数需要原始列名称感谢mate,您的解决方案是正确的,但可能对我没有帮助,因为它可以从两个列中吐出值,但是我希望仅从第一列(即x)查看VAL!我不想把cols vals放在一起只是想让你知道它起作用了。。非常感谢