gpt4 book ai didi

没有聚合的sql pivot

转载 作者:行者123 更新时间:2023-12-01 08:16:46 27 4
gpt4 key购买 nike

在尝试转换 sql 表时,我看到了这篇文章 Here .通过使用这种方法,我创建了一个查询。但是我现在已经意识到它当然会使用 MAX 函数聚合结果。但是,我需要 Colum 旋转,但要显示所有事件。从上面的帖子中获取的代码。

  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,
FROM Classes
GROUP BY dy

所以本质上我希望使用它但没有 max 函数?有任何想法吗?

编辑示例数据

Day   Period    Subject

Mon 1 Ch
Mon 2 Ph
Tue 1 Ph
Tue 2 Ele
Mon 1 Ch
Mon 2 Ph
Tue 1 Ph
Tue 2 Ele

示例输出

Day   P1   P2   

Mon Ch Ph
Mon Ch Ph
Tue Ph Ele
Tue Ph Ele

所以基本上,如果数据输入两次,它就会出现两次...

编辑实际的sql..

  SELECT other
MAX(CASE WHEN period = 1 THEN table2.subj ELSE NULL END) AS P1,
MAX(CASE WHEN period = 2 THEN table2.subj ELSE NULL END) AS P2
FROM table1
left join table2 on table2.ID = subject

GROUP BY other

示例数据

表1

Dy   Period    Subject other

Mon 1 1 1
Mon 2 2 1
Tue 1 3 2
Tue 2 4 2
Mon 1 5 3
Mon 2 6 3
Tue 1 7 4
Tue 2 8 4

表2

ID  Subj
1 ch
2 ph
3 ph
4 ele
5 ch
6 ph
7 ph
8 Ele

示例输出

Day   P1   P2   other

Mon Ch Ph 1
Mon Ch Ph 3
Tue Ph Ele 2
Tue Ph Ele 4

最佳答案

您的示例数据和您想要的输出不匹配。输出中的 Mth、CS2、Lab 和 Hu 值来自哪里?它们不在输入中。

尚不完全清楚您要做什么,但假设您的输出中的单独行(例如)Mon 代表两个不同的学生,您需要在 SELECT 列表中包含区分列 (StudentID) 并且GROUP BY 子句。然后,您可以安全地使用 MAX,而不是聚合(因为每个输出单元格只有一个值),而是诱使引擎为您做枢轴。

这是包含学生 ID 的 SQL:

SELECT student_id, 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,
FROM Classes
GROUP BY student_id, dy

这将为每个学生每天返回一条记录,显示他们的每日类(class)表。如果您希望输出按天排序,然后按学生排序,请在 SELECT 和 GROUP BY 子句中反转 student_id 和 dy 的顺序。

关于没有聚合的sql pivot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4004635/

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