Try this:
DECLARE @Author TABLE (
AuthorID int,
Author varchar(50),
BookID int,
Book varchar(100)
);
INSERT INTO @Author VALUES
(1, 'A1', 1, 'B1'),(1, 'A1', 2, 'B2'),(1, 'A1', 3, 'B3'),(2, 'A2', 4, 'B4'),
(2, 'A2', 5, 'B5'),(3, 'A3', 6, 'B6'),(4, 'A4', 7, 'B7'),(5, 'A5', 7, 'B7'),
(6, 'A6', 7, 'B7'),(7, 'A7', 7, 'B7'),(8, 'A8', 7, 'B7');
;WITH CTE_Author_Book_Order AS (
SELECT AuthorID, Author, BookID, Book, ROW_NUMBER() OVER(PARTITION BY AuthorID ORDER BY BookID) AS RN
FROM @Author
),
CTE_Author_Book_1 AS (
SELECT AuthorID, Author, BookID, Book
FROM CTE_Author_Book_Order
WHERE RN = 1
),
CTE_Author_Book_2 AS (
SELECT AuthorID, Author, BookID, Book
FROM CTE_Author_Book_Order
WHERE RN = 2
),
CTE_Author_Book_3 AS (
SELECT AuthorID, Author, BookID, Book
FROM CTE_Author_Book_Order
WHERE RN = 3
),
CTE_Author_Book_4 AS (
SELECT AuthorID, Author, BookID, Book
FROM CTE_Author_Book_Order
WHERE RN = 4
)
SELECT c1.AuthorID, c1.Author, c1.BookID AS BookID_1, c1.Book AS Book_1,
ISNULL(CAST(c2.BookID AS varchar(10)), '') AS BookID_2, ISNULL(c2.Book, '') AS Book_2,
ISNULL(CAST(c3.BookID AS varchar(10)), '') AS BookID_3, ISNULL(c3.Book, '') AS Book_3,
ISNULL(CAST(c4.BookID AS varchar(10)), '') AS BookID_4, ISNULL(c4.Book, '') AS Book_4
FROM CTE_Author_Book_1 AS c1
LEFT JOIN CTE_Author_Book_2 AS c2 ON c1.AuthorID = c2.AuthorID
LEFT JOIN CTE_Author_Book_3 AS c3 ON c1.AuthorID = c3.AuthorID
LEFT JOIN CTE_Author_Book_4 AS c4 ON c1.AuthorID = c4.AuthorID;