Ответ 1
Преобразование столбцов в строки называется UNPIVOT
. Вы не указали, какую версию SQL Server используете, но есть несколько способов получить результат.
Вы можете использовать SELECT
с UNION ALL
:
SELECT name, 'age' as column, cast(age as varchar(10)) as value
FROM yourtable
UNION ALL
SELECT name, 'gender' as column, gender as value
FROM yourtable;
Если вы используете SQL Server 2005+, вы можете использовать функцию UNPIVOT:
SELECT name, column, age
FROM
(
SELECT
name,
age = cast(age as varchar(10)),
gender
FROM yourtable
) d
UNPIVOT
(
value
for column in (age, gender)
) unpiv;
Наконец, вместо функции UNPIVOT вы также можете использовать CROSS APPLY
с помощью VALUES
(2008+) или UNION ALL
:
SELECT name, column, age
FROM yourtable
CROSS APPLY
(
VALUES
('age', cast(age as varchar(10)),
('gender', gender)
) c (column, value);
Любая из этих версий даст вам результат, который вы хотите. Вы заметите, что мне нужно было расставить столбец age
в varchar
. Это связано с тем, что тип данных/длина (в univot) столбцов должны быть одинаковыми, поскольку вы преобразуете их в один столбец в конечном результате.