mat*_*ian 12 sql sql-server unpivot
我正在尝试围绕它的多个列旋转一个表来获得3列(数据透视图,列名,值)
例如:
name | age | gender
------+-------+---------
John | 20 | M
Jill | 21 | F
Run Code Online (Sandbox Code Playgroud)
会成为:
name | column | value
-----+--------+-------
John | age | 20
John | gender | M
Jill | age | 21
Jill | gender | F
Run Code Online (Sandbox Code Playgroud)
我已经搜索了相当多的东西,但没有发现类似的情况 - 特别是因为枢轴似乎是在与我想要完成的相反方向完成的.
Tar*_*ryn 24
将列转换为行称为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;
Run Code Online (Sandbox Code Playgroud)
如果您使用的是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;
Run Code Online (Sandbox Code Playgroud)
最后,而不是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);
Run Code Online (Sandbox Code Playgroud)
任何这些版本都会为您提供所需的结果.你会注意到我必须将age列转换为varchar.这是因为列的数据类型/长度(在unpivot中)必须相同,因为您将在最终结果中将它们转换为单个列.
| 归档时间: |
|
| 查看次数: |
48333 次 |
| 最近记录: |