Это было бы хорошим соответствием для UNPIVOT , но если вы не захотите сделать это динамическим SQL-оператором, я не вижу никакого способа обойти жесткое кодирование Quarters в операторе.
SQL Statement
SELECT Name
, Quarter
, Value
FROM q
UNPIVOT (
Value FOR Quarter IN (Q1, Q2, Q3, Q4)
) u
Тестовый скрипт
;WITH q (Name, Q1, Q2, Q3, Q4) AS (
SELECT 'A', 1, 2, 3, 4
UNION ALL SELECT 'B', 5, 6, 7, 8
UNION ALL SELECT 'C', 9, 0, 1, 2
)
SELECT Name
, Quarter
, Value
FROM q
UNPIVOT (
Value FOR Quarter IN (Q1, Q2, Q3, Q4)
) u