2011-11-18 65 views
3

如何在同一選擇中多次使用計算列而不重複表達式並且不使用公用表表達式或複雜子查詢?如何避免在同一選擇中多次重複計算的表達式?

DECLARE @T TABLE (NUM1 INT,NUM2 INT) 
INSERT INTO @T VALUES (2,3); 
INSERT INTO @T VALUES (5,7); 
INSERT INTO @T VALUES(32,3); 
INSERT INTO @T VALUES(6,8); 

SELECT (NUM1+NUM2) [ADD], [ADD]*2, [ADD]/2,* FROM @T 

有沒有什麼辦法可以在SQL Server 2005中解決這個問題?

+0

是添加計算列的表,或表的視圖,一個選擇嗎? – HABO

回答

8

可以使用橫aplly

SELECT T2.[ADD], 
     T2.[ADD]*2, 
     T2.[ADD]/2 
FROM @T AS T1 
    CROSS APPLY (SELECT T1.NUM1+T1.NUM2) AS T2([ADD]) 

或CTE

;WITH C AS 
(
    SELECT NUM1+NUM2 AS [ADD] 
    FROM @T 
) 
SELECT [ADD], 
     [ADD]*2, 
     [ADD]/2 
FROM C 

或子查詢(也稱爲派生表)

SELECT T.[ADD], 
     T.[ADD]*2, 
     T.[ADD]/2 
FROM (
     SELECT NUM1+NUM2 AS [ADD] 
     FROM @T 
    ) AS T 

這是不可能使用在聲明的同一個字段列表中的列別名。

1

你可以使用派生表來實現:

SELECT 
    *, 
    [ADD]*2, 
    [ADD]/2 
FROM 
(
    SELECT (NUM1+NUM2) AS [ADD], NUM1, NUM2 FROM @T 
) AS A 
相關問題