gpt4 book ai didi

sql - 如何将行透视为列(自定义透视)

转载 作者:行者123 更新时间:2023-12-03 10:39:22 24 4
gpt4 key购买 nike

我有一个类似于以下的 Sql 数据库表:

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
  • 我更改了一些列名以避免保留字
  • 关于sql - 如何将行透视为列(自定义透视),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3120835/

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