为了账号安全,请及时绑定邮箱和手机立即绑定

关于列名问题

关于列名问题

子衿沉夜 2019-07-01 10:09:19
关于列名问题我有张桌子StudentMarks列Name, Maths, Science, English..数据就像Name,  Maths, Science, English   Tilak, 90,    40,      60  Raj,   30,    20,      10我想把它安排如下:Name,  Subject,  Marks Tilak, Maths,    90Tilak, Science,  40Tilak, English,  60带着不枢轴我能够正确地获取名称,标记,但不能将源表中的列名获取到Subject列在所需的结果集中。我怎样才能做到这一点?到目前为止,我已经达到了以下查询(获取名称,标记)select Name, Marks from studentmarksUnpivot(   Marks for details in (Maths, Science, English)) as UnPvt
查看完整描述

2 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

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

select u.name, u.subject, u.marksfrom student sunpivot(
  marks  for subject in (Maths, Science, English)) u;

看见SQLFiddle与演示


查看完整回答
反对 回复 2019-07-01
?
莫回无

TA贡献1865条经验 获得超7个赞

您还可以通过使用具有以下代码的逻辑序列来尝试标准的SQL不旋转方法。以下代码有3个步骤:

  1. 使用交叉联接为每行创建多个副本(本例中还创建了Subject列)
  2. 创建列“标记”并使用案例表达式填写相关值(例如:如果主题是科学,那么从科学列中选择值)
  3. 删除任何空组合(如果存在,如果基表中没有空值,则可以完全避免表达式)

     select *
     from 
     (
        select name, subject,
        case subject    when 'Maths' then maths    when 'Science' then science    when 'English' then english    end as Marksfrom studentmarksCross Join (values('Maths'),('Science'),('English')) AS Subjct(Subject))as Dwhere marks is not null;


查看完整回答
反对 回复 2019-07-01
  • 2 回答
  • 0 关注
  • 566 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信