gpt4 book ai didi

SQL Server 取消透视多个列

转载 作者:行者123 更新时间:2023-12-02 07:23:57 24 4
gpt4 key购买 nike

我试图围绕它的许多列旋转一个表以达到 3 列(透视、列名称、值)

例如:

name  |  age  |  gender
------+-------+---------
John | 20 | M
Jill | 21 | F

会变成:

name | column | value
-----+--------+-------
John | age | 20
John | gender | M
Jill | age | 21
Jill | gender | F

我在谷歌上搜索了很多,但没有找到类似的情况 - 特别是因为枢轴似乎是在与我想要完成的方向相反的方向上完成的。

最佳答案

列到行的转换称为 UNPIVOT 。您没有指定所使用的 SQL Server 版本,但有多种不同的方法可以获取结果。

您可以使用SELECTUNION 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 APPLYVALUES (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 。这是因为列的数据类型/长度(在逆透视中)必须相同,因为您将在最终结果中将它们转换为单个列。

关于SQL Server 取消透视多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24828346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com