我需要将一些sql选择从sybase转换为mssql方言。问题导致我使用别名进行简单查询。 一个简单的例子
select amount * 2 as doubleamount, doubleamount / 4 as half amount from event
您可以看到仍然使用别名。有了这里的简单,你可以多次写amount * 2
。对于复杂的查询,你不能再这样做了,特别是如果程序等,我已经选择了几十个预期会继续的alias-colums。我可以以某种方式访问已存在的结果并不断推算吗?
答案 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