如何将特定 Col 中的行值转换为 Col 标题

问题描述 投票:0回答:1

我在oracle DB中有一个表,其中包含尝试多篇论文的学生的记录,如图所示:-

Main table showing records

现在我想得到每行一个学生的结果,如下图所示:-

Desired output from SQL query

sql oracle row col
1个回答
0
投票

一种选择是使用数据透视:

SQL>   SELECT main_event_id event,
  2           student_id studid,
  3           MAX ("'MCQs - T/F'_TM") AS "MCQs - T/F total marks",
  4           MAX ("'MCQs - T/F'_MO") AS "MCQs - T/F obtained marks",
  5           MAX ("'Short question'_TM") AS "Short question total marks",
  6           MAX ("'Short question'_MO") AS "Short question obtained marks"
  7      FROM (
  8              SELECT * FROM exam
  9           )
 10           PIVOT (MAX (total_marks) tm, MAX (marks_obtained) mo
 11                 FOR sub_event_name
 12                 IN ('MCQs - T/F', 'Short question'))
 13  GROUP BY main_event_id, student_id
 14  ORDER BY main_event_id, student_id;

 EVENT  STUDID MCQs - T/F total marks MCQs - T/F obtained marks Short question total marks Short question obtained marks
------ ------- ---------------------- ------------------------- -------------------------- -----------------------------
     1     101                     10                         2                         20                            12
     1     102                     10                         8                         20                            16

另一种是使用条件聚合:

SQL>   SELECT main_event_id event,
  2           student_id studid,
  3           MAX (CASE WHEN sub_event_name = 'MCQs - T/F' THEN total_marks END)
  4              "MCQs - T/F total marks",
  5           MAX (CASE WHEN sub_event_name = 'MCQs - T/F' THEN marks_obtained END)
  6              "MCQs - T/F obtained marks",
  7           MAX (CASE WHEN sub_event_name = 'Short question' THEN total_marks END)
  8              "Short question total marks",
  9           MAX (CASE WHEN sub_event_name = 'Short question' THEN marks_obtained END)
 10              "Short question obtained marks"
 11      FROM exam
 12  GROUP BY main_event_id, student_id
 13  ORDER BY main_event_id, student_id;

 EVENT  STUDID MCQs - T/F total marks MCQs - T/F obtained marks Short question total marks Short question obtained marks
------ ------- ---------------------- ------------------------- -------------------------- -----------------------------
     1     101                     10                         2                         20                            12
     1     102                     10                         8                         20                            16

SQL>

如果您询问是否可以动态地这样做 - 是的,使用 XML,但结果是 XML 格式。

© www.soinside.com 2019 - 2024. All rights reserved.