2017-03-05 43 views
0

用表grades保存下列學生的等級直方圖,需要unpivot它將列名轉換爲索引。不支持離散值的直方圖數據

CREATE TABLE grades 
AS 
    SELECT name, exams, grade_poor, grade_fair, grade_good, grade_vgood 
    FROM (VALUES 
    ('arun' , 8 , 1 , 4 , 2 , 1), 
    ('neha' , 10 , 3 , 2 , 1 , 4), 
    ('ram' , 5 , 1 , 1 , 3 , 0), 
    ('radha' , 8 , 0 , 3 , 1 , 4) 
) AS t(name,exams,grade_poor,grade_fair,grade_good,grade_vgood); 

等級可以索引到數值 - 例如下面的例子。

+-------------+--------+ 
| grade | value | 
+-------------+--------+ 
| grade_poor |  1 | 
| grade_fair |  2 | 
| grade_good |  3 | 
| grade_vgood |  4 | 
+-------------+--------+ 

預計輸出

+-------+-------+ 
| name | grade | 
+-------+-------+ 
| arun |  1 | 
| arun |  2 | 
| arun |  2 | 
| arun |  2 | 
| arun |  2 | 
| arun |  3 | 
| arun |  3 | 
| arun |  4 | 
| neha |  1 | 
| neha |  1 | 
| neha |  1 | 
| neha |  2 | 
| neha |  2 | 
| neha |  3 | 
| neha |  4 | 
| neha |  4 | 
| neha |  4 | 
| neha |  4 | 
| radha |  2 | 
| radha |  2 | 
| radha |  2 | 
| radha |  3 | 
| radha |  4 | 
| radha |  4 | 
| radha |  4 | 
| radha |  4 | 
| ram |  1 | 
| ram |  2 | 
| ram |  3 | 
| ram |  3 | 
| ram |  3 | 
+-------+-------+ 

答問here表明這樣做的Postgres的方式。

+0

名稱是唯一的還是存在id列? – GurV

+0

@GurV他們可以被認爲是uniq。 – user3206440

回答

0

試試這個:

with up_grades as (
    select 
     g.name, 
     x.i grade_type, 
     case x.i 
      when 1 then grade_poor 
      when 2 then grade_fair 
      when 3 then grade_good 
      when 4 then grade_vgood 
     end grades 
    from grades g 
    cross join (
     select 1 i union all 
     select 2 i union all 
     select 3 i union all 
     select 4 i 
    ) x 
) 
select g.name, g.grade_type 
from up_grades g 
join (
    select level n 
    connect by 
     level <= (select max(grades) from up_grades) 
) c on g.grades >= c.n 
order by g.name, g.grade_type; 

的CTE裏面,我們unpivoting表即轉換列轉換爲行。然後,我們使用分層查詢來生成給定名稱和等級類型的行數。

免責聲明-Tested only on Oracle(在地方添加所需的雙重表格後),因爲語法大多匹配。未在Netezza上測試。

+0

Netezza不支持分層查詢 – NzGuy

+0

@NzGuy - 此網站另有說明 - https://www.ibm.com/support/knowledgecenter/en/SSGU8G_11.70.0/com.ibm.sqls.doc/ids_sqs_2033.htm – GurV

+0

遞歸截至目前7.2,netezza不支持查詢。 https://www.ibm.com/support/knowledgecenter/en/SSULQD_7.2.1/com.ibm.nz.dbu.doc/r_dbuser_with_clause.html – NzGuy