用于透视下表中数据的 SQL 查询

阿克谢·帕鲁卡

我的考勤目录表如下,

目录表

如上图所示,班上有 4 名学生,卷号为 1、2、3、4。PNT、SGP 和 DAP 三位老师在相应的讲座时间都在同一班级出勤。上表显示了每位学生相对于每位教师的总缺勤情况。

我想生成如下输出,

在此处输入图片说明

该表说明了每个学生在相应老师的授课下的总缺勤情况。

如何从给定的表中得到这样的结果?


DDL 和示例数据:

create table mytable ( TeacherID varchar(3), RollNo number, Total_Absency number);
insert into mytable values('PNT', 1, 0);
insert into mytable values('PNT', 2, 4);
insert into mytable values('PNT', 3, 0);
insert into mytable values('PNT', 4, 1);
insert into mytable values('SGP', 1, 2);
insert into mytable values('SGP', 2, 1);
insert into mytable values('SGP', 3, 1);
insert into mytable values('SGP', 4, 1);
insert into mytable values('DAP', 1, 1);
insert into mytable values('DAP', 2, 1);
insert into mytable values('DAP', 3, 1);
insert into mytable values('DAP', 4, 0);
专卖店

对于 Oracle,请使用以下PIVOT子句:

SELECT * FROM
(
  SELECT TeacherID, RollNo, Total_Absency FROM mytable
)
PIVOT 
(
  MAX(Total_Absency)
  FOR TeacherID
  IN ( 'PNT', 'SGP', 'DAP' )
)
ORDER BY RollNo

DB Fiddle 上的演示

 
罗诺 | 'PNT' | 'SGP' | 'DAP' 
-----: | ----: | ----: | ----: 
     1 | 0 | 2 | 1 
     2 | 4 | 1 | 1 
     3 | 0 | 1 | 1 
     4 | 1 | 1 | 0

对于其他 RDBMS,一般的解决方案是使用条件聚合:

SELECT
    RollNo,
    MAX(CASE WHEN TeacherID = 'PNT' THEN Total_Absency END) AS PNT,
    MAX(CASE WHEN TeacherID = 'SGP' THEN Total_Absency END) AS SGP,
    MAX(CASE WHEN TeacherID = 'DAP' THEN Total_Absency END) AS DAP
FROM mytable
GROUP BY RollNo
ORDER BY RollNo

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

用于在 MS-Access 中透视数据的 SQL 查询

来自分类Dev

在 sql 查询中透视

来自分类Dev

SQL数据透视查询数据

来自分类Dev

Oracle中的SQL透视查询

来自分类Dev

在动态数据透视SQL查询中替换空值

来自分类Dev

为下表创建SQL查询

来自分类Dev

SQL Server数据透视查询-问题

来自分类Dev

SQL Server数据透视查询-问题

来自分类Dev

如何获取数据透视格式的SQL查询?

来自分类Dev

SQl交叉数据透视查询错误

来自分类Dev

如何遍历SQL Server数据透视查询

来自分类Dev

如何创建此数据透视 SQL 查询?

来自分类Dev

用于合并数据的SQL查询

来自分类Dev

SQL查询透视列

来自分类Dev

查询中的SQL子查询

来自分类Dev

在使用CTE中的数据透视表的sql查询中,仅显示大于1的值

来自分类Dev

SQL查询,用于从多个表中获取数据

来自分类Dev

如何为下表编写SQL查询?

来自分类Dev

如何为下表编写SQL查询

来自分类Dev

SQL查询不应返回数据透视表中包含空值的行

来自分类Dev

使用SQL Server 2008 R2在数据透视表查询中的聚合函数

来自分类Dev

在数据透视SQL查询中为字段名称添加别名

来自分类Dev

SQL(HSQLDB)查询以在LibreOffice Base中创建等效的数据透视表

来自分类Dev

Oracle SQL:如何为子查询中的数据透视表调用创建的列(别名)

来自分类Dev

如何从Sql中的动态数据透视查询中计算百分比

来自分类Dev

SQL查询中的第二个数据透视

来自分类Dev

如何在 SQL 动态数据透视查询中设置 NULL 为 0

来自分类Dev

如何从SQL查询中执行SQL查询

来自分类Dev

SQL查询数据分割