Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 将MS SQL ISNULL()与别名一起使用_Sql Server 2005 - Fatal编程技术网

Sql server 2005 将MS SQL 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中引用函数内的别名 您有两个选择

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

对于我使用的这个需求

按isnull(x,y)asc排序

这似乎适用于列名,但如果使用alias,MS SQL将无法计算列名,并抛出无效列名异常

因此,谁能告诉我

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


谢谢

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放在一起只是想让你知道它起作用了。。非常感谢