SQL Server: временно собирать значения в агрегации и повторно использовать в том же запросе

Как мне накапливать значения в T-SQL? AFAIK нет типа ARRAY.
Я хочу повторно использовать значения в том же запросе, как показано в этом примере PostgreSQL, используя array_agg () .

SELECT a[1] || a[i] AS foo
      ,a[2] || a[5] AS bar  -- assuming we have >= 5 rows for simplicity
FROM   (
    SELECT array_agg(text_col ORDER BY text_col) AS a
          ,count(*)::int4 AS i
    FROM   tbl
    WHERE  id between 10 AND 100
    ) x

Как мне лучше всего решить эту проблему с помощью T-SQL ?
Лучшее, что я мог придумать, - это два CTE и подзапросы:

;WITH x AS (
  SELECT row_number() OVER (ORDER BY name) AS rn
        ,name AS a
  FROM   #t
  WHERE  id between 10 AND 100
  ), i AS (
  SELECT count(*) AS i
  FROM   x
  )
SELECT (SELECT a FROM x WHERE rn = 1) + (SELECT a FROM x WHERE rn = i) AS foo
      ,(SELECT a FROM x WHERE rn = 2) + (SELECT a FROM x WHERE rn = 5) AS bar
FROM   i

Тестовая установка:

CREATE TABLE #t(
 id   INT PRIMARY KEY
,name NVARCHAR(100))

INSERT INTO #t VALUES
 (3 , 'John')
,(5 , 'Mary')
,(8 , 'Michael')
,(13, 'Steve')
,(21, 'Jack')
,(34, 'Pete')
,(57, 'Ami')
,(88, 'Bob')

Является есть способ попроще?

7
задан Erwin Brandstetter 13 November 2011 в 10:10
поделиться