Как мне накапливать значения в 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')
Является есть способ попроще?