sql - 使用列名称取消透视

标签 sql sql-server sql-server-2008 tsql unpivot

我有一个表StudentMarks,其中包含姓名、数学、科学、英语列。 数据就像

Name,  Maths, Science, English  
Tilak, 90,    40,      60  
Raj,   30,    20,      10

我想将其安排如下:

Name,  Subject,  Marks
Tilak, Maths,    90
Tilak, Science,  40
Tilak, English,  60

unpivot我能够正确获取 Name、Marks,但无法将源表中的列名称获取到所需结果集中的 Subject 列。

我怎样才能实现这个目标?

到目前为止,我已经达到以下查询(获取姓名、标记)

select Name, Marks from studentmarks
Unpivot
(
  Marks for details in (Maths, Science, English)

) as UnPvt

最佳答案

您的查询非常接近。您应该能够使用以下内容,其中在最终选择列表中包含主题:

select u.name, u.subject, u.marks
from student s
unpivot
(
  marks
  for subject in (Maths, Science, English)
) u;

参见SQL Fiddle with demo

关于sql - 使用列名称取消透视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19055902/

相关文章:

sql - 选择表中除第一个行之外的行

sql-server - 首先匹配密码然后更改密码的存储过程

sql-server-2008 - 用于标签的 GUID 与身份

sql - Postgresql 选择前导空格的处理

sql - 如何级联删除 PostgreSQL 中的多列

c# - 当我在文本框中键入 RowFilter 时出现语法错误

mysql - sql函数将分钟: seconds ,数百转换为秒

sql - 尝试编写查询以指定客户是否完成了特定列的两种类型

c# - 将数据集传递给 SQL Server 存储过程

sql - 计算一组给定的项目(重量)所需的盒子数量