正确的句子SQL

时间:2017-02-09 05:19:33

标签: sql sql-server sql-server-2008

COL。 A和B OREADY INSERT

我的示例数据:

A          B           K       P       M
--         --         --       --      -- 
2          5                       
3          5                  

查询:

select  
    ([A] + [B]) AS [K], 
    ([A] * [B]) AS [P],
    -- can I write like this?
    ([P]-[K]) AS [M] 
    -- or must I write :
    -- ([A]+[B]) - ([A]*[B]) /* sometimes the formula is very long
from  
    TB

3 个答案:

答案 0 :(得分:1)

你的问题有点薄,但你可以用来避免写出公式的重复部分的一个技巧是"定义"子查询中的各个部分,然后在外部查询中使用这些定义的别名。像这样:

SELECT t.[K] - t.[P] AS some_value
FROM
(
    SELECT ([A]+[B]) AS [K],
           ([A]*[B]) AS [P]
    FROM yourTable
) t

当然,您将子查询放入CTE,但出于解释目的,我更喜欢上面给出的内容。

修改

正如@juergen指出的那样,使用这个子查询技巧通常会使整个查询更慢。因此,您需要确定使用子查询获得的简洁性是否值得以较慢的性能进行权衡。

答案 1 :(得分:1)

是您可以使用子查询编写此内容。检查以下查询。

    select *,([P]-[K]) as M
    From
    (
    select A,B,([A]+[B]) AS [K], ([A]*[B]) AS [P],
    FROM TB
    )a

答案 2 :(得分:0)

列别名不能在同一个select语句中使用,它可以在外部查询select语句中使用。

select [A],[B],[K],[P],[K]-[P] AS [M] FROM
(
select  [A],[B],
([A]+[B]) AS [K], 
([A]*[B]) AS [P]
) AS A