是否可以计算输出列的值?从col1中减去col2
举例来说,如果我有以下
select col1, col2
from table1
,不使用存储过程时,是有可能做这样的事情
伪代码
select col1 as figure1, col2 as figure2, figure2 - figure1
from table1
编辑1:
唯一原因为什么我试图不去做col2 - col1是因为col1和col2是通过计算创建的,而且我不想在计算上加倍。
是否可以计算输出列的值?从col1中减去col2
举例来说,如果我有以下
select col1, col2
from table1
,不使用存储过程时,是有可能做这样的事情
伪代码
select col1 as figure1, col2 as figure2, figure2 - figure1
from table1
编辑1:
唯一原因为什么我试图不去做col2 - col1是因为col1和col2是通过计算创建的,而且我不想在计算上加倍。
您不能直接使用别名。但你可以使用cte或subquery
;with cte as
(
select
col1 as figure1,
col2 as figure2
from table1
)
select
figure1,
figure2,
figure2-figure1 as figure3
from cte
不,我不认为上面会有效。
但是,下面的工作,你不需要存储过程。
select col1 as figure1, col2 as figure2, col1 - col2 as result
from table1
你可以这样做:
select col1, col2, col1 - col2
from table
不需要存储过程。
这是假设两列是同一类型的,否则你可能需要事先投他们。哦,列需要一些数字数据类型 - 从VARCHAR处理减去文本通常不会有好下场......
这是行不通的,发帖者说,col1和col2上都ASLO计算。 – HLGEM 2011-03-10 15:34:55
你可以做任何..
Select col1 as figure1, col2 as figure2, (col2-col1) as figure3
from table1
或
select figure1, figure2, (figure2-figure1) as figure3
from
(
select col1 as figure1, col2 as figure2
from table1
)
图1和图2是别名,因此它们仅可用于上面的查询。它们不是表中的实际列。
如果这是你的实际需求,你肯定不需要存储过程。
我还没有尝试第二个示例。但是,我认为这是不必要的,只是为了在外部查询中获取别名列。它是否有任何性能问题,特别是对于大量的行? – shahkalpesh 2011-03-10 15:10:10
@shahkalpesh,第二个代码是获取别名的方法(或@Mikael Eriksson的CTE解决方案,它本质上是一回事)。它可能会更快,因为它只需要进行一次计算。否则,您需要重复公式中的整个计算。 – HLGEM 2011-03-10 15:30:53
@ shahkalpesh-第二个示例仅显示如何在需要时访问别名列。对于这个简单的例子,这根本就没有必要,我只是展示了如果你有一个带有别名的复杂查询并且想要从外部查询访问它们,你的代码将如何看待。 – 2011-03-10 22:04:43
简单地说就是。
你可以做各种数学运算与您的数据。有时您可能会遇到转换问题,特别是当您想将值转换回字符串时。
我所遇到的对接最大的痛苦是十进制值工作时,你可能会试图将值存储在一个参数,因为它没有被定义为大到足以容纳结果时,得到的转换错误。要记住的事情。
select col1 as figure1, col2 as figure2, col2 - col1 as figure3
from table1
肯定会做的伎俩,而是把事情说清楚,这是一个有趣的问题;-)
这不起作用,海报说col1和col2都是同样的计算。 – HLGEM 2011-03-10 15:34:29
我喜欢这个解决方案!谢谢。 – oshirowanen 2011-03-10 15:51:50