SQL :oracle 11g,将结果集拆分为 2 个子集并排显示



我取消了将列转换为行的透视。 http://sqlfiddle.com/#!4/fc489/6

现在我想并排向学生显示类似

AVGGPA      1                    1
COURSEAVG   101.5                101.5
STUDENTNAME Jilly Doe            John Doe

任何提示??

如果你真的只有两个子集需要担心,那么在你目前所拥有的基础上构建的一个简单方法是:

SELECT labeln,
  MAX(CASE WHEN rn = 1 THEN value1 END) AS col1,
  MAX(CASE WHEN rn = 2 THEN value1 END) AS col2
FROM (
  SELECT * FROM (
    SELECT to_char(avg(g1.grade)) AS avgGPa,
      to_char(avg(s1.course)) AS courseAVG,
      s1.student_name AS studentName,
      ROW_NUMBER() OVER (PARTITION BY NULL ORDER BY s1.student_name) AS RN
    FROM student s1
    JOIN grade g1 ON s1.student_name = g1.student_name
    GROUP BY s1.student_name
  )
  UNPIVOT (value1 FOR labeln IN (avggpa, courseavg, studentname))
)
GROUP BY labeln
ORDER BY labeln;

SQL 小提琴

它基本上是一个手动透视;向原始查询添加一个row_number(),然后使用它来决定相应值进入哪一列,max()折叠空白。您可以通过复制max(case(...))位并更改rn检查来轻松添加更多列。但是你必须知道你需要得到多少列;或者高估并在最后有一些空白。

理论上,您可以使用实际的pivot()但事先不知道值,因此没有要在for子句中使用的值。您也许可以使用 XML 方法,但这可能有点矫枉过正;这取决于您对此的实际用途。

最新更新