Search code examples
sql-serverselectcalculated-columnstable-structure

How to set a calculated column using a subquery


I have a table to which I would like to add a calculated column. The query I want to set it to is more complex than a standard arithmetic operation and I am unsure how to set up the calculated column using the query. I attempted to use an ALTER TABLE statement:

    ALTER TABLE shareholder.Amount
ADD CalculatedAmount As 
(SELECT sum(Amount) FROM shareholder.TransactionInput T 
                    WHERE T.ShareClassLabel = Amount.ShareClassLabel
                    AND T.ValuationDate < Amount.NAVDate
                    GROUP BY T.ShareClassLabel)

But this results in an error: 'Subqueries are not allowed in this context. Only scalar expressions are allowed'. I know the sub-query itself works correctly having tested it on its own so it's just a matter of working out how to set the calculated column to be the result of it.

Thanks! (I am using SQL Server 2014 Management Studio)


Solution

  • It is not possible to have a Computed Column with a Sub Query,

    A computed column is computed from an expression that can use other columns in the same table.

    So it is not possible to have A Query but you can use Expressions Like

    ColumnA-ColumnB+ColumnC
    

    Instead, you can convert it as a View and Compute The Column values there

    Like this

    CREATE VIEW MyComputedvIEW
    AS
    SELECT
      *,
      CalculatedAmount = (SELECT sum(Amount) FROM shareholder.TransactionInput T 
                        WHERE T.ShareClassLabel = Amount.ShareClassLabel
                        AND T.ValuationDate < Amount.NAVDate
                        GROUP BY T.ShareClassLabel)
    FROM YourTable