我做了unpivot,將列轉換爲行。 http://sqlfiddle.com/#!4/fc489/6SQL:oracle 11g,將結果集拆分爲2個子集並並排顯示
現在我想通過側像
AVGGPA 1 1
COURSEAVG 101.5 101.5
STUDENTNAME Jilly Doe John Doe
任何提示顯示給學生的信息?方
我做了unpivot,將列轉換爲行。 http://sqlfiddle.com/#!4/fc489/6SQL:oracle 11g,將結果集拆分爲2個子集並並排顯示
現在我想通過側像
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_number()
添加到您的原始查詢,然後使用它來決定相應的值進入哪個列,用max()
摺疊空白。您可以通過複製max(case(...))
位和更改rn
檢查來輕鬆添加更多列。但是你必須知道你需要多少列才能結束;或高估並在最後有一些空白。
從理論上講,您可以使用實際的pivot()
,但您事先不知道這些值,因此您沒有在for
子句中使用的值。你也許可以使用XML方法,但這可能是矯枉過正的;取決於你的實際使用情況。
真棒作品迷人的方式...我如何接受你的答案 –
爲什麼兩個子集 - 如果你有兩個以上的學生呢? –
每個學生都會有不同的欄目,所以3個學生的含義是3列學生數據,每欄只有一個學生數據,最多隻能有5個學生 –
樞軸在這裏工作,但爲什麼還難以使用SQL來處理它沒有設計的東西?用SQL檢索數據,讓你的應用程序格式和可視化。除非你真的想要明文SQLPlus結果... –