将sybase select转换为mssql select

时间:2018-05-14 08:52:41

标签: sql-server tsql sql-server-2016

我需要将一些sql选择从sybase转换为mssql方言。问题导致我使用别名进行简单查询。 一个简单的例子

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

您可以看到仍然使用别名。有了这里的简单,你可以多次写amount * 2。对于复杂的查询,你不能再这样做了,特别是如果程序等,我已经选择了几十个预期会继续的alias-colums。我可以以某种方式访问​​已存在的结果并不断推算吗?

2 个答案:

答案 0 :(得分:1)

您是否尝试使用派生表?

设定:

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   

以上是fiddle以上内容。

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

答案 1 :(得分:0)

您无法在后续列中使用别名。相反,您需要使用实际功能。此外,如果列名称包含空格,则必须在[括号]中括起来,或者是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