Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 将sybase select转换为mssql select_Sql Server_Tsql_Sql Server 2016 - Fatal编程技术网

Sql server 将sybase select转换为mssql select

Sql server 将sybase select转换为mssql select,sql-server,tsql,sql-server-2016,Sql Server,Tsql,Sql Server 2016,我需要将一些sql select从sybase翻译成mssql方言。问题导致我使用别名进行简单查询。 一个简单的例子 select amount * 2 as doubleamount, doubleamount / 4 as half amount from event 您可以看到别名仍在使用。使用像这里这样的简单代码,您可以多次编写amount*2。对于复杂的查询,你不能再这样做了,尤其是当程序等出现时。我已经选择了几十个alias Column,预计它们将继续。我可以访问已经存在的结果并

我需要将一些sql select从sybase翻译成mssql方言。问题导致我使用别名进行简单查询。 一个简单的例子

select amount * 2 as doubleamount, doubleamount / 4 as half amount from event

您可以看到别名仍在使用。使用像这里这样的简单代码,您可以多次编写
amount*2
。对于复杂的查询,你不能再这样做了,尤其是当程序等出现时。我已经选择了几十个alias Column,预计它们将继续。我可以访问已经存在的结果并继续计算吗?

您不能在后续列中使用别名。相反,您需要使用实际函数。此外,如果列名包含空格或是SQL Server中的保留项,则必须将其括在[括号]中

select 
   amount * 2 as doubleamount, 
   (amount * 2) / 4 as [half amount]
from event
这里有一种更统一的别名方法,许多人认为它更好。我还将空格改为下划线

select 
   doubleamount = amount * 2, 
   half_amount = (amount * 2) / 4
from event

您是否尝试过使用派生表

设置:

drop table if exists event;
create table event(amount money);
insert into event (amount) values (4);
如果您只需要一个级别的重用,那么一个派生表就足够了,例如:

select doubleamount,
       doubleamount / 4 as [half amount]
from
        (select amount * 2 as doubleamount
         from   event ) dt;

doubleamount | half amount
------------ | -----------
8.0000       | 2.0000   
这是上面的一个例子

如果需要引用
doubleamount
,则可以将上述内容转换为它自己的派生表(即使用嵌套的派生表)