Преобразование столбцов в строки называется 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
. Это связано с тем, что тип данных/длина (в unpivot) столбцов должны быть одинаковыми, поскольку в конечном результате вы будете преобразовывать их в один столбец.
person
Taryn
schedule
18.07.2014