Вы можете назначить номера строк в CTE, а затем отключить с помощью UNION ALL
.
Примечания:
uid
выглядит как целочисленный тип данных, в то время как name
является строкой, поэтому вам необходимо преобразовать uid
в VARCHAR
elseUNION ALL
вызовет ошибку.
очевидно, что ViewName
кодируется в запросе на viewA
Запрос:
WITH cte AS (
SELECT 'viewA' ViewName, uid, name, ROW_NUMBER() OVER(ORDER BY uid) rn FROM viewA
)
SELECT ViewName, 'uid' ColName, rn Row, CAST(uid AS varchar(50)) value FROM cte
UNION ALL SELECT ViewName, 'name' ColName, rn Row, name FROM cte
ORDER BY rn, ColName DESC
Демонстрация на DB FIddle :
ViewName | ColName | Row | value
:------- | :------ | :-- | :------
viewA | uid | 1 | 10
viewA | name | 1 | test1
viewA | uid | 2 | 20
viewA | name | 2 | test2
viewA | uid | 3 | 30
viewA | name | 3 | test3
viewA | uid | 4 | 40
viewA | name | 4 | test4