2017-02-09 18 views
1

COL。一個&乙OREADY INSERT正確的句子SQL

我的樣本數據:

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 
+0

我不清楚你在問什麼。也許你可以向我們展示真正的整個公式和當前查詢? –

回答

1

是的你可以寫這個使用子查詢。檢查以下查詢。

select *,([P]-[K]) as M 
    From 
    (
    select A,B,([A]+[B]) AS [K], ([A]*[B]) AS [P], 
    FROM TB 
    )a 
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

順便說一下子查詢可以使查詢方式變慢。 –

+0

@juergend是的,我知道這一點,並不認爲這是OP的重點。 –

+0

不夠公平,但我認爲在查詢數據庫時速度總是一個問題。 –

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