Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:Oracle11g,将结果集拆分为2个子集并并排显示_Sql_Oracle11g_Unpivot - Fatal编程技术网

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

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

我取消了将列转换为行的IVOT

现在我想并排向学生显示一些信息,比如

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的结果…很棒的作品迷人的方式。。。我如何接受你的回答