2011-03-10 75 views
1

是否可以计算输出列的值?从col1中减去col2

举例来说,如果我有以下

select col1, col2 
from table1 

,不使用存储过程时,是有可能做这样的事情

伪代码

select col1 as figure1, col2 as figure2, figure2 - figure1 
from table1 

编辑1:

唯一原因为什么我试图不去做col2 - col1是因为col1和col2是通过计算创建的,而且我不想在计算上加倍。

回答

3

您不能直接使用别名。但你可以使用cte或subquery

;with cte as 
(
    select 
    col1 as figure1, 
    col2 as figure2 
    from table1 
) 
select 
    figure1, 
    figure2, 
    figure2-figure1 as figure3 
from cte 
+0

我喜欢这个解决方案!谢谢。 – oshirowanen 2011-03-10 15:51:50

1

不,我不认为上面会有效。
但是,下面的工作,你不需要存储过程。

select col1 as figure1, col2 as figure2, col1 - col2 as result 
from table1 
2

你可以这样做:

select col1, col2, col1 - col2 
from table 

不需要存储过程。

这是假设两列是同一类型的,否则你可能需要事先投他们。哦,列需要一些数字数据类型 - 从VARCHAR处理减去文本通常不会有好下场......

+0

这是行不通的,发帖者说,col1和col2上都ASLO计算。 – HLGEM 2011-03-10 15:34:55

2

当然。

select col1 as figure1, col2 as figure2, col1 - col2 as subtractions from table1 
+0

这不起作用,海报说col1和col2都是同样的计算。 – HLGEM 2011-03-10 15:33:37

+0

对不起。这是后来编辑,所以原来的帖子不属于这个部分。是的,在这种情况下,你必须去子查询路线。 – Lav 2011-03-10 15:59:59

0

取决于数据类型,但它应该是可能的(假设他们是整数或东西,你可以对你的操作):

SELECT col1, col2, col1-col2 as 'Variance' 
FROM Mytable 
Where Conditions 
+0

这不起作用,海报说col1和col2都是同样的计算。 – HLGEM 2011-03-10 15:34:07

+0

@HLGEM - 在答复发布后20分钟后添加了.... – JNK 2011-03-10 15:49:15

3

你可以做任何..

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是别名,因此它们仅可用于上面的查询。它们不是表中的实际列。

如果这是你的实际需求,你肯定不需要存储过程。

+0

我还没有尝试第二个示例。但是,我认为这是不必要的,只是为了在外部查询中获取别名列。它是否有任何性能问题,特别是对于大量的行? – shahkalpesh 2011-03-10 15:10:10

+0

@shahkalpesh,第二个代码是获取别名的方法(或@Mikael Eriksson的CTE解决方案,它本质上是一回事)。它可能会更快,因为它只需要进行一次计算。否则,您需要重复公式中的整个计算。 – HLGEM 2011-03-10 15:30:53

+0

@ shahkalpesh-第二个示例仅显示如何在需要时访问别名列。对于这个简单的例子,这根本就没有必要,我只是展示了如果你有一个带有别名的复杂查询并且想要从外部查询访问它们,你的代码将如何看待。 – 2011-03-10 22:04:43

0

简单地说就是。

你可以做各种数学运算与您的数据。有时您可能会遇到转换问题,特别是当您想将值转换回字符串时。

我所遇到的对接最大的痛苦是十进制值工作时,你可能会试图将值存储在一个参数,因为它没有被定义为大到足以容纳结果时,得到的转换错误。要记住的事情。

0
select col1 as figure1, col2 as figure2, col2 - col1 as figure3 
from table1 

肯定会做的伎俩,而是把事情说清楚,这是一个有趣的问题;-)

+0

这不起作用,海报说col1和col2都是同样的计算。 – HLGEM 2011-03-10 15:34:29