Наилучшим подходом является вставка в таблицу переменных / ha sh таблицы (если число строк мало, используйте переменную таблицы или таблицу ha sh, если количество строк довольно велико). Затем обновите агрегацию и, наконец, выберите переменную таблицы или таблицу ha sh. Изучить план запроса необходимо.
DECLARE @MYTABLE TABLE (ID INT, [Title] VARCHAR(500), [Class] VARCHAR(500),
[Current - Last 30 Days Col1] INT, [Current - Last 30 Days Col2] INT,
[Current - Last 90 Days Col1] INT,[Current - Last 90 Days Col2] INT,
[Current - Last 365 Days Col1] INT, [Current - Last 365 Days Col2] INT,
[Last year - Last 30 Days Col1] INT, [Last year - Last 30 Days Col2] INT,
[Last year - Last 90 Days Col1] INT, [Last year - Last 90 Days Col2] INT,
[Last year - Last 365 Days Col1] INT, [Last year - Last 365 Days Col2] INT)
INSERT INTO @MYTABLE(ID, [Title],[Class],
[Current - Last 30 Days Col1], [Current - Last 30 Days Col2],
[Current - Last 90 Days Col1], [Current - Last 90 Days Col2],
[Current - Last 365 Days Col1], [Current - Last 365 Days Col2],
[Last year - Last 30 Days Col1], [Last year - Last 30 Days Col2],
[Last year - Last 90 Days Col1], [Last year - Last 90 Days Col2],
[Last year - Last 365 Days Col1], [Last year - Last 365 Days Col2]
)
SELECT b.id ,d.[Title] ,e.Class ,0,0,0,0,0,0,0,0,0,0,0,0
FROM tb1 a
INNER JOIN tb2 b on a.id=b.fid and a.col3 = b.col4
INNER JOIN tb3 c on b.fid = c.col5
INNER JOIN tb4 d on c.id = d.col6
INNER JOIN tb5 e on c.col7 = e.id
GROUP BY b.id, d.Title, e.Class
UPDATE T
SET [Current - Last 30 Days Col1]=K.[Current - Last 30 Days Col1] ,
[Current - Last 30 Days Col2] =K.[Current - Last 30 Days Col2],
[Current - Last 90 Days Col1] = K.[Current - Last 90 Days Col1],
[Current - Last 90 Days Col2] =K.[Current - Last 90 Days Col2] ,
[Current - Last 365 Days Col1] =K.[Current - Last 365 Days Col1],
[Current - Last 365 Days Col2] =K.[Current - Last 365 Days Col2],
[Last year - Last 30 Days Col1] =K.[Last year - Last 30 Days Col1],
[Last year - Last 30 Days Col2] =K.[Last year - Last 30 Days Col2],
[Last year - Last 90 Days Col1] =K.[Last year - Last 90 Days Col1],
[Last year - Last 90 Days Col2] =K.[Last year - Last 90 Days Col2],
[Last year - Last 365 Days Col1] =K.[Last year - Last 365 Days Col1],
[Last year - Last 365 Days Col2]=K.[Last year - Last 365 Days Col2]
FROM @MYTABLE T JOIN
(
SELECT
b.id as [ID]
,ISNULL(Sum(CASE WHEN a.DateCol >= DATEADD(MONTH,-1,GETDATE()) THEN a.col1 ELSE 0 END),0) as [Current - Last 30 Days Col1]
,ISNULL(Sum(CASE WHEN a.DateCol >= DATEADD(MONTH,-1,GETDATE()) THEN a.col2 ELSE 0 END),0) as [Current - Last 30 Days Col2]
,ISNULL(Sum(CASE WHEN a.DateCol >= DATEADD(QUARTER,-1,GETDATE()) THEN a.col1 ELSE 0 END),0) as [Current - Last 90 Days Col1]
,ISNULL(Sum(CASE WHEN a.DateCol >= DATEADD(QUARTER,-1,GETDATE()) THEN a.col2 ELSE 0 END),0) as [Current - Last 90 Days Col2]
,ISNULL(Sum(CASE WHEN a.DateCol >= DATEADD(YEAR,-1,GETDATE()) THEN a.col1 ELSE 0 END),0) as [Current - Last 365 Days Col1]
,ISNULL(Sum(CASE WHEN a.DateCol >= DATEADD(YEAR,-1,GETDATE()) THEN a.col2 ELSE 0 END),0) as [Current - Last 365 Days Col2]
,ISNULL(Sum(CASE WHEN a.DateCol >= DATEADD(MONTH,-13,GETDATE()) and a.DateCol <= DATEADD(MONTH,-12,GETDATE()) THEN a.col1 ELSE 0 END),0) as [Last year - Last 30 Days Col1]
,ISNULL(Sum(CASE WHEN a.DateCol >= DATEADD(MONTH,-13,GETDATE()) and a.DateCol <= DATEADD(MONTH,-12,GETDATE()) THEN a.col2 ELSE 0 END),0) as [Last year - Last 30 Days Col2]
,ISNULL(Sum(CASE WHEN a.DateCol >= DATEADD(QUARTER,-5,GETDATE()) and a.DateCol <= DATEADD(QUARTER,-4,GETDATE()) THEN a.col1 ELSE 0 END),0) as [Last year - Last 90 Days Col1]
,ISNULL(Sum(CASE WHEN a.DateCol >= DATEADD(QUARTER,-5,GETDATE()) and a.DateCol <= DATEADD(QUARTER,-4,GETDATE()) THEN a.col2 ELSE 0 END),0) as [Last year - Last 90 Days Col2]
,ISNULL(Sum(CASE WHEN a.DateCol >= DATEADD(YEAR,-2,GETDATE()) and a.DateCol <= DATEADD(YEAR,-1,GETDATE()) THEN a.col1 ELSE 0 END),0) as [Last year - Last 365 Days Col1]
,ISNULL(Sum(CASE WHEN a.DateCol >= DATEADD(YEAR,-2,GETDATE()) and a.DateCol <= DATEADD(YEAR,-1,GETDATE()) THEN a.col2 ELSE 0 END),0) as [Last year - Last 365 Days Col2]
FROM tb1 a
INNER JOIN tb2 b on a.id=b.fid and a.col3 = b.col4
INNER JOIN tb3 c on b.fid = c.col5
INNER JOIN tb4 d on c.id = d.col6
INNER JOIN tb5 e on c.col7 = e.id
GROUP BY b.id
) AS K ON T.ID=K.ID
SELECT *
FROM @MYTABLE