Вы можете попытаться воспроизвести порядок с вымышленным row_number и после этого идентифицировать группы, добавив новый столбец с row_number (). Из c это не то, как вы должны хранить свои данные (попробуйте использовать первичные ключи, обеспечивая правильный порядок для ваших данных), но я надеюсь, это поможет:
WITH Src_Tbl AS (
SELECT
t.ID
,t.Name
,t.Value
FROM (VALUES
('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'author', 'Raghav Mishra')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'title', 'The First Article to SSC')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'genre', 'Fiction')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'price', '200')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'pub_date', '1/31/2013')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'review', 'Interesting book')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'author', 'Vasanth Mishra')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'title', 'The First Article to SSC')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'genre', 'Fiction')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'price', '90')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'pub_date', '1/29/2013')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'review', 'fiction book')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'author', 'Vinoth Mishra')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'title', 'The First Article to SSC')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'genre', 'Fiction')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'price', '150')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'pub_date', '1/30/2013')
,('9C8AA305-5977-4803-8C5F-E0E8665B9069', 'review', 'Good book')
) t (ID, Name, Value)
)
SELECT
*
FROM (
SELECT
t.ID
,t.Name
,t.Value
,ROW_NUMBER() OVER (PARTITION BY Id, Name ORDER BY t.RN_for_correct_order) AS RN
FROM (
SELECT
t.ID
,t.Name
,t.Value
,ROW_NUMBER() OVER (ORDER BY ISNULL(1, 1)) AS RN_for_correct_order -- try to get same order as in example
FROM Src_Tbl t
) t
) t
PIVOT
(MAX(Value) FOR Name IN (author, title, genre, price, pub_date, review)) AS PivotTable;