Поскольку это, кажется, основа для отчета, который вы хотите запустить, я бы, вероятно, создал бы представление вашей базовой таблицы:
-- create a view as the data source for your report
CREATE VIEW dbo.baseSuppleView AS
-- create a CTE to determine the "Buys" column
WITH BuysCTE AS
(
SELECT
com.YrAmount,
com.Tng,
Buys = CASE
WHEN b.BaseAmount IS NULL
THEN com.Amount + com.BaseAmount + com.Amount1
ELSE
com.Amount + com.Amount1 + b.BaseAmount
END
FROM dbo.baseSupple AS b
INNER JOIN dbo.comSupple AS com ON com.id = b.id
)
SELECT -- select from that CTE - now defined, you can use the "Buys" column
YrAmount,
Buys,
SUM(Buys - Tng) AS Fy11,
SUM(Buys - 2 * Tng) AS Fy12
FROM BuysCTE
GROUP BY YrAmount, Buys -- when you have SUM(....), you need GROUP BY(....)
, а затем просто используйте это представление в качестве источника для вашего отчета.
Поскольку вычисление этого столбца выполняется в определении представления, этот вычисляемый столбец никак не влияет на вашу базовую таблицу и ее производительность, и вам не нужно постоянно создавать и удалять столбцы в вашей таблице ... .