2017-03-05 3 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これらはユニークと見なすことができます。 – user3206440

答えて

0

はこれを試してみてください:CTEインサイド

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; 

を、我々はすなわち、行に列を変換テーブルをアンピボット。次に階層化クエリを使用して、与えられた名前とグレードタイプのグレードがある行を生成します。

免責事項 - Tested only on Oracle(場所に必要なデュアルテーブルを追加した後)構文がほとんど一致するため。 Netezzaでテストされていません。

+0

Netezza dosen'tは階層クエリをサポートしていません – NzGuy

+0

@NzGuy - このサイトはそうでないと言います - https://www.ibm.com/support/knowledgecenter/en/SSGU8G_11.70.0/com.ibm.sqls.doc/ids_sqs_2033.htm – GurV

+0

再帰的クエリは現在のnetezzaではサポートされていません7.2。 https://www.ibm.com/support/knowledgecenter/en/SSULQD_7.2.1/com.ibm.nz.dbu.doc/r_dbuser_with_clause.html – NzGuy