UNPIVOT Clause
The UNPIVOT clause turns rows of a table-valued expression into column values.
Syntax
SELECT <'unpivoted columns'>
FROM
    (
	<'SELECT query that produces the data'>
) AS <'alias for the source query'>
UNPIVOT (
    <'a column containing the values of the columns that will become values instead of headers'>
	FOR <'a column containing the values that were headers'>
    IN ( ['first column header'], ['second column header'], ... ['last column header'])
) AS <'an alias for the unpivoted table'>
	<'optional ORDER BY clause'> ;;
Example
-- Create a table and insert data
CREATE TABLE testTable (AuthorID INTEGER, Book1 INTEGER, Book2 INTEGER, Book3 INTEGER);;
INSERT INTO testTable VALUES (1, 4, 3, 5, 4, 4);;
-- Unpivot the table
SELECT AuthorID, Book, Orders
FROM (
	SELECT AuthorID, Book1, Book2, Book3
	FROM testTable
 ) p 
UNPIVOT (
	Orders FOR Book IN (Book1, Book2, Book3)
) AS unpivotedTable;;