If the first part of your calculation is actual calculation (`Col1 + Col2`) then the individual calculations are performed for each "calculation" step.

>     SELECT <CalculationA> As ColA,
>            <CalculationB> As ColB,
>            <CalculationA> + <CalculationB> As ColC
>     FROM TableA

So if we replace `<CalculationA>` from your statement with a valid calculation using `ColA` and `ColB` from a table, and repeat this for each subsequent `<CalculationB>,...` step, then the actual task of calculating the result will be performed for each step individually. 

To reproduce paste the following code snippets into SQL Server Management Studio and run. Make sure you have turned on the option **Include Actual Execution Plan**. 

[![Include Actual Execution Plan][1]][1]

It creates a database, a table, populates the table and performs a calculation which produces an execution plan.
 

<pre>
CREATE DATABASE Q252661
GO
USE Q252661
GO

CREATE TABLE dbo.Q252661_TableA  (
	ColA  INT,
	ColB  INT,
	ColC  INT,
	ColD  INT)   

GO

INSERT INTO Q252661_TableA
(
	ColA,
	ColB,
	ColC,
	ColD
)
VALUES
(
	1,
	2,
	3,
	4
),(
	2,
	4,
	8,
	16
)

GO
SELECT	ColA + ColB AS ColA, 
		ColC + ColD AS ColB,
		ColA + ColB + ColC + ColD AS ColC
FROM	Q252661_TableA

GO
</pre>

The query will run and produce a graphical execution plan similar to the following: 

[![Graphical Execution Plan of ADDing values][2]][2]
**<sup>Graphical Execution Plan of ADDing values</sup>**

As in Randi's answer we'll focus on the **Compute Scalar** operator.

If you click on the Query Execution Plan in SSMS and right-click to show the actual plan you will find the following XML (focussing on the **Compute Scalar** portion):


              <ComputeScalar>
                <DefinedValues>
                  <DefinedValue>
                    <ColumnReference Column="Expr1003" />
                    <ScalarOperator ScalarString="[Q252661].[dbo].[Q252661_TableA].[ColA]+[Q252661].[dbo].[Q252661_TableA].[ColB]">
                      <Arithmetic Operation="ADD">
                        <ScalarOperator>
                          <Identifier>
                            <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColA" />
                          </Identifier>
                        </ScalarOperator>
                        <ScalarOperator>
                          <Identifier>
                            <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColB" />
                          </Identifier>
                        </ScalarOperator>
                      </Arithmetic>
                    </ScalarOperator>
                  </DefinedValue>
                  <DefinedValue>
                    <ColumnReference Column="Expr1004" />
                    <ScalarOperator ScalarString="[Q252661].[dbo].[Q252661_TableA].[ColC]+[Q252661].[dbo].[Q252661_TableA].[ColD]">
                      <Arithmetic Operation="ADD">
                        <ScalarOperator>
                          <Identifier>
                            <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColC" />
                          </Identifier>
                        </ScalarOperator>
                        <ScalarOperator>
                          <Identifier>
                            <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColD" />
                          </Identifier>
                        </ScalarOperator>
                      </Arithmetic>
                    </ScalarOperator>
                  </DefinedValue>
                  <DefinedValue>
                    <ColumnReference Column="Expr1005" />
                    <ScalarOperator ScalarString="[Q252661].[dbo].[Q252661_TableA].[ColA]+[Q252661].[dbo].[Q252661_TableA].[ColB]+[Q252661].[dbo].[Q252661_TableA].[ColC]+[Q252661].[dbo].[Q252661_TableA].[ColD]">
                      <Arithmetic Operation="ADD">
                        <ScalarOperator>
                          <Arithmetic Operation="ADD">
                            <ScalarOperator>
                              <Arithmetic Operation="ADD">
                                <ScalarOperator>
                                  <Identifier>
                                    <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColA" />
                                  </Identifier>
                                </ScalarOperator>
                                <ScalarOperator>
                                  <Identifier>
                                    <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColB" />
                                  </Identifier>
                                </ScalarOperator>
                              </Arithmetic>
                            </ScalarOperator>
                            <ScalarOperator>
                              <Identifier>
                                <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColC" />
                              </Identifier>
                            </ScalarOperator>
                          </Arithmetic>
                        </ScalarOperator>
                        <ScalarOperator>
                          <Identifier>
                            <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColD" />
                          </Identifier>
                        </ScalarOperator>
                      </Arithmetic>
                    </ScalarOperator>
                  </DefinedValue>
                </DefinedValues>
                <RelOp AvgRowSize="23" EstimateCPU="8.07E-05" EstimateIO="0.0032035" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="2" LogicalOp="Table Scan" NodeId="1" Parallel="false" PhysicalOp="Table Scan" EstimatedTotalSubtreeCost="0.0032842" TableCardinality="2">
                  <OutputList>
                    <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColA" />
                    <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColB" />
                    <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColC" />
                    <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColD" />
                  </OutputList>
                  <TableScan Ordered="false" ForcedIndex="false" ForceScan="false" NoExpandHint="false" Storage="RowStore">
                    <DefinedValues>
                      <DefinedValue>
                        <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColA" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColB" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColC" />
                      </DefinedValue>
                      <DefinedValue>
                        <ColumnReference Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" Column="ColD" />
                      </DefinedValue>
                    </DefinedValues>
                    <Object Database="[Q252661]" Schema="[dbo]" Table="[Q252661_TableA]" IndexKind="Heap" Storage="RowStore" />
                  </TableScan>
                </RelOp>
              </ComputeScalar>


So each individual calculation is performed again and again in the case of the values being retrieved from an actual table. The following XML fragment is from the above summary:

                    <ScalarOperator ScalarString="[Q252661].[dbo].[Q252661_TableA].[ColA]+[Q252661].[dbo].[Q252661_TableA].[ColB]">
                      <Arithmetic Operation="ADD">

There are five `<Arithmetic Operation="ADD">` steps in the execution plan. 

------------------------

## Answering your Question

> Would CalculationA and CalculationB, each be calculated twice?

Yes, and the last calculation would be the sum of `CalculationA + CalculationB`

> Or would the optimizer be clever enough to calculate them once and use the result twice?

It depends on what you are calculating.

> My assumption is that it would perform the calculation twice.

You are right for certain calculations. 

> In which case, depending upon the calculations involved, might it be better to use a derived table, or nested view?

Correct.

------------------------

Once you have finished you can drop your database again:

    USE [master]
    GO
    DROP DATABASE Q252661


  [1]: https://i.sstatic.net/XYh8y.png
  [2]: https://i.sstatic.net/gZCEn.png