我有很多計算列,他們不斷重複自己,其中一個內部的其他人,包括嵌套案例陳述。如何重用計算列避免重複sql語句?
有一個真正簡化的版本,我正在尋找一種方法。
SELECT
(1+2) AS A,
A + 3 AS B,
B * 7 AS C
FROM MYTABLE
在此先感謝。
我有很多計算列,他們不斷重複自己,其中一個內部的其他人,包括嵌套案例陳述。如何重用計算列避免重複sql語句?
有一個真正簡化的版本,我正在尋找一種方法。
SELECT
(1+2) AS A,
A + 3 AS B,
B * 7 AS C
FROM MYTABLE
在此先感謝。
你可以嘗試這樣的事情。
SELECT
A.Val AS A,
B.Val AS B,
C.Val AS C
FROM MYTABLE
cross apply(select 1 + 2) as A(Val)
cross apply(select A.Val + 3) as B(Val)
cross apply(select B.Val * 7) as C(Val)
「保存」您的計算結果的唯一方法是在子查詢中使用它們,這樣您就可以使用A, B and C
。不幸的是,它不能以其他方式完成。
您可以創建computed columns來表示所需的值。另外,如果您的計算依賴於單獨的表中的數據,則可以使用view。
你想計算結果嗎?在這種情況下,您可以將相關計算放在標量用戶定義的函數中,並在您的select
聲明中使用。
還是你想的計算結果顯示爲表中的列,然後使用一個計算列:
CREATE TABLE Test(
ID INT NOT NULL IDENTITY(1,1),
TimesTen AS ID * 10
)
您不能通過稍後引用其列別名來引用剛剛創建的表達式。將整個選擇列表視爲同時或以隨機順序實現 - 當您嘗試創建表達式以創建B時,A還不存在。您需要重複表達式 - 我不認爲您馬上就能作出‘簡單’計算列,而不必重複它們,並查看相同的 - 你必須巢的事情,比如:
SELECT A, B, C = B * 7
FROM
(
SELECT A, B = A + 3
FROM
(
SELECT A = (1 + 2)
) AS x
) AS y;
或重複的表達(但我想那是你'重新嘗試避免)。
如果有人仍有意另一種選擇:
with aa(a) as (select 1+2)
, bb(b) as (select a+3 from aa)
,cc(c) as (select b*7 from bb)
SELECT aa.a, bb.b, cc.c
from aa,bb,cc
這可以通過使用嵌套的情況下,和/或連接來完成? –
@Eduardo不確定你的意思。請使用一些示例查詢更新問題,使用您想要刪除的重複部分,我或其他人可以查看它。 –