Sql server 将sybase select转换为mssql select
我需要将一些sql select从sybase翻译成mssql方言。问题导致我使用别名进行简单查询。 一个简单的例子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,预计它们将继续。我可以访问已经存在的结果并
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
,则可以将上述内容转换为它自己的派生表(即使用嵌套的派生表)