PIVOT

Syntax:

;WITH <cte_name> AS
(
    SELECT
        <grouping_column>,
        <spreading_column>,
        <aggregation_column>
    FROM <source_table>
)
SELECT <select_list>
FROM <cte_name>
    PIVOT( <aggregate_function>(<aggregation_column>)
        FOR <spreading_column> IN (<distinct_spreading_values>) ) AS <alias>;

Example: Display the monthly totals per customer side-by-side for a year.

SELECT ct.CustomerID,
    DATENAME(month, transactiondate) [MonthName],
    SUM(ct.TransactionAmount) [2013MonthlyTotal]
FROM Sales.CustomerTransactions ct
WHERE ct.TransactionDate BETWEEN '2013-01-01' AND '2013-12-31'
    AND ct.TransactionTypeID = 1
    AND ct.CustomerID = 801
GROUP BY ct.CustomerID,
    DATENAME(month, transactiondate),
    DATEPART(month, transactiondate)
ORDER BY DATEPART(month, transactiondate);

;WITH PivotData
    AS (SELECT ct.CustomerID,
               DATENAME(month, transactiondate) [MonthName],
               ct.TransactionAmount [2013MonthlyTotal]
        FROM Sales.CustomerTransactions ct
        WHERE ct.TransactionDate BETWEEN '2013-01-01' AND '2013-12-31'
              AND ct.TransactionTypeID = 1)
    SELECT *
    FROM PivotData pd PIVOT(SUM([2013MonthlyTotal]) FOR MonthName
         IN([January],
            [February],
            [March],
            [April],
            [May],
            [June],
            [July],
            [August],
            [September],
            [October],
            [November],
            [December])) AS P
    ORDER BY CustomerID;