首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用列名取消透视

使用列名取消透视
EN

Stack Overflow用户
提问于 2013-09-28 00:37:12
回答 2查看 297.8K关注 0票数 134

我有一个列为Name, Maths, Science, English的表StudentMarks。数据类似于

代码语言:javascript
复制
Name,  Maths, Science, English  
Tilak, 90,    40,      60  
Raj,   30,    20,      10

我想把它安排如下:

代码语言:javascript
复制
Name,  Subject,  Marks
Tilak, Maths,    90
Tilak, Science,  40
Tilak, English,  60

使用unpivot,我可以正确地获取名称和标记,但不能将源表中的列名转换为所需结果集中的Subject列。

我如何才能做到这一点?

到目前为止,我已经完成了以下查询(获取名称,标记)

代码语言:javascript
复制
select Name, Marks from studentmarks
Unpivot
(
  Marks for details in (Maths, Science, English)

) as UnPvt
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-28 00:48:40

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

代码语言:javascript
复制
select u.name, u.subject, u.marks
from student s
unpivot
(
  marks
  for subject in (Maths, Science, English)
) u;

请参阅SQL Fiddle with demo

票数 216
EN

Stack Overflow用户

发布于 2019-11-01 10:46:06

使用交叉连接的另一种方法是在交叉连接中指定列名

代码语言:javascript
复制
select name, Subject, Marks 
from studentmarks
Cross Join (
values (Maths,'Maths'),(Science,'Science'),(English,'English')
) un(Marks, Subject)
where marks is not null;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19055902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档