加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 如何将行转移到列中(自定义透视)

发布时间:2020-12-12 06:51:09 所属栏目:MsSql教程 来源:网络整理
导读:我有一个类似于以下的Sql Database表: Day Period SubjectMon 1 ChMon 2 PhMon 3 MthMon 4 CSMon 5 Lab1Mon 6 Lab2Mon 7 Lab3Tue 1 PhTue 2 EleTue 3 HuTue 4 PhTue 5 EnTue 6 CS2Tue 7 Mth 我希望它显示如下:种类的交叉表或枢轴 Day P1 P2 P3 P4 P5 P6 P7M
我有一个类似于以下的Sql Database表:
Day   Period    Subject

Mon   1         Ch
Mon   2         Ph
Mon   3         Mth
Mon   4         CS
Mon   5         Lab1
Mon   6         Lab2
Mon   7         Lab3
Tue   1         Ph
Tue   2         Ele
Tue   3         Hu
Tue   4         Ph
Tue   5         En
Tue   6         CS2
Tue   7         Mth

我希望它显示如下:种类的交叉表或枢轴

Day   P1   P2   P3   P4   P5   P6   P7

Mon   Ch   Ph   Mth  CS2  Lab1 Lab2 Lab3
Tue   Ph   Ele  Hu   Ph   En   CS2  Mth

这样做的理想方式是什么?有人可以给我看一下Sql代码吗?

解决方法

您可以使用PIVOT函数来完成它,但我更喜欢旧的学校方法:
SELECT
    dy,MAX(CASE WHEN period = 1 THEN subj ELSE NULL END) AS P1,MAX(CASE WHEN period = 2 THEN subj ELSE NULL END) AS P2,MAX(CASE WHEN period = 3 THEN subj ELSE NULL END) AS P3,MAX(CASE WHEN period = 4 THEN subj ELSE NULL END) AS P4,MAX(CASE WHEN period = 5 THEN subj ELSE NULL END) AS P5,MAX(CASE WHEN period = 6 THEN subj ELSE NULL END) AS P6,MAX(CASE WHEN period = 7 THEN subj ELSE NULL END) AS P7
FROM
    Classes
GROUP BY
    dy
ORDER BY
    CASE dy
        WHEN 'Mon' THEN 1
        WHEN 'Tue' THEN 2
        WHEN 'Wed' THEN 3
        WHEN 'Thu' THEN 4
        WHEN 'Fri' THEN 5
        WHEN 'Sat' THEN 6
        WHEN 'Sun' THEN 7
        ELSE 8
    END

>我更改了一些列名以避免使用保留字

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读