Как я могу избежать повторения вычисленного выражения несколько раз в одном и том же выборе? - PullRequest
4 голосов
/ 18 ноября 2011

Как можно использовать вычисляемый столбец несколько раз в одном и том же выборе без повторения выражения и без использования общих табличных выражений или сложных подвыборов?

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

Ответы [ 2 ]

12 голосов
/ 18 ноября 2011

Вы можете использовать перекрестное применение

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 голос
/ 18 ноября 2011

Для этого можно использовать производную таблицу:

SELECT 
     *,
     [ADD]*2,
     [ADD]/2
FROM
(
     SELECT (NUM1+NUM2) AS [ADD], NUM1, NUM2 FROM @T 
) AS A
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...