SQL:Oracle11g,将结果集拆分为2个子集并并排显示
我取消了将列转换为行的IVOT 现在我想并排向学生显示一些信息,比如SQL:Oracle11g,将结果集拆分为2个子集并并排显示,sql,oracle11g,unpivot,Sql,Oracle11g,Unpivot,我取消了将列转换为行的IVOT 现在我想并排向学生显示一些信息,比如 AVGGPA 1 1 COURSEAVG 101.5 101.5 STUDENTNAME Jilly Doe John Doe 有什么提示吗???如果你真的只有两个子集需要担心,一个简单的方法是建立在你现有的基础上: SELECT labeln, MAX(CASE WHEN rn = 1 THEN value1 END
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;
它基本上是一个手动枢轴;在原始查询中添加一个row\u number()
,然后用它来决定对应的值进入哪一列,用max()
折叠空格。通过复制max(case(…)
位并仅更改rn
检查,您可以轻松添加更多列。但是你必须知道你需要有多少列;或者高估了,最后有一些空白
理论上,您可以使用实际的
pivot()
,但您事先不知道值,因此在for
子句中没有要使用的值。您也许可以使用XML方法,但这可能有些过分;取决于您的实际使用情况。为什么是两个子集?如果您有两个以上的学生,该怎么办?每个学生都是独立的列,因此3个学生表示3列学生数据,每列包含一个学生数据,限制为5个学生Spivot在此工作,但是,为什么要努力将SQL用于它不是为之设计的东西呢?使用SQL检索数据,让您可以格式化应用程序并将其可视化。除非你真的想要纯文本SQLPlus的结果…很棒的作品迷人的方式。。。我如何接受你的回答