行列转换

来源:互联网 发布:远程控制软件源代码 编辑:程序博客网 时间:2024/06/08 17:52
列转行-A(1)SQL> create table tb  2  (  3     Name    varchar(10) ,  4     Subject varchar(10) ,  5     Result  int  6  ); Table createdSQL> insert into tb(Name , Subject , Result) values('张三' , '语文' , 74); 1 row insertedSQL> insert into tb(Name , Subject , Result) values('张三' , '数学' , 83); 1 row insertedSQL> insert into tb(Name , Subject , Result) values('张三' , '物理' , 93); 1 row insertedSQL> insert into tb(Name , Subject , Result) values('李四' , '语文' , 74); 1 row insertedSQL> insert into tb(Name , Subject , Result) values('李四' , '数学' , 84); 1 row insertedSQL> insert into tb(Name , Subject , Result) values('李四' , '物理' , 94); 1 row insertedSQL> select * from tb; NAME       SUBJECT                                     RESULT---------- ---------- ---------------------------------------张三       语文                                            74张三       数学                                            83张三       物理                                            93李四       语文                                            74李四       数学                                            84李四       物理                                            94 6 rows selected SQL>  SQL> select name 姓名,  2    max(case subject when '语文' then result else 0 end) 语文,  3    max(case subject when '数学' then result else 0 end) 数学,  4    max(case subject when '物理' then result else 0 end) 物理  5  from tb  6  group by name; 姓名               语文         数学         物理---------- ---------- ---------- ----------李四               74         84         94张三               74         83         93 
<pre name="code" class="sql">行转列-A(1)select * from(  select 姓名 as Name , Subject = '语文' , Result = 语文 from tb1  union all  select 姓名 as Name , Subject = '数学' , Result = 数学 from tb1  union all  select 姓名 as Name , Subject = '物理' , Result = 物理 from tb1) t ORA-00923: 未找到要求的 FROM 关键字 SQL> select 姓名 as Name , Subject = '语文' , Result = 语文 from tb1; select 姓名 as Name , Subject = '语文' , Result = 语文 from tb1 ORA-00923: 未找到要求的 FROM 关键字 SQL> select 姓名 as Name , Subject '语文' , Result  语文 from tb1; select 姓名 as Name , Subject '语文' , Result  语文 from tb1 ORA-00923: 未找到要求的 FROM 关键字 SQL> select 姓名 as Name , Subject as '语文' , Result  语文 from tb1; select 姓名 as Name , Subject as '语文' , Result  语文 from tb1 ORA-00923: 未找到要求的 FROM 关键字 SQL> select 姓名 as Name , '语文' Subject ,语文 Result from tb1; NAME       SUBJECT                                  RESULT---------- ------- --------------------------------------- SQL> select 姓名 as Name , '语文' Subject ,语文 Result from tb1; NAME       SUBJECT                                  RESULT---------- ------- ---------------------------------------张三       语文                                         74李四       语文                                         74 SQL> select 姓名 as Name , '数学' Subject ,数学 Result from tb1; NAME       SUBJECT                                  RESULT---------- ------- ---------------------------------------张三       数学                                         83李四       数学                                         84 SQL> select 姓名 as Name , '物理' Subject ,物理 Result from tb1; NAME       SUBJECT                                  RESULT---------- ------- ---------------------------------------张三       物理                                         93李四       物理                                         94 SQL>  select * from                                                                                                                                                                                                                   (                                                                                                                 select 姓名 as Name , '语文' Subject ,语文 Result from tb1                                                        union all                                                                                                       select 姓名 as Name , '数学' Subject ,数学 Result from tb1                                                       union all                                                                                                       select 姓名 as Name , '物理' Subject ,物理 Result from tb1                                                     ) t                                                                                                             order by Name DESC, case Subject when '语文' then 1 when '数学' then 2 when '物理' then 3--when '总分' then 4end  DESC; NAME       SUBJECT     RESULT---------- ------- ----------张三       物理            93张三       数学            83张三       语文            74李四       物理            94李四       数学            84李四       语文            74 6 rows selected SQL>-------------------------------------------------------------行转列-------------------------------------------------------------------------------------------------SQL> create table tb1  2  (  3     姓名 varchar(10) ,  4     语文 int ,  5     数学 int ,  6     物理 int  7  )  8  ; Table created SQL> SQL> insert into tb1(姓名 , 语文 , 数学 , 物理) values('张三',74,83,93); 1 row inserted SQL> insert into tb1(姓名 , 语文 , 数学 , 物理) values('李四',74,84,94); select * from tb;1 row inserted SQL> select * from tb1; 姓名                                            语文                                      数学                                      物理---------- --------------------------------------- --------------------------------------- ---------------------------------------张三                                            74                                      83                                      93李四                                            74                                      84                                      94 SQL> select * from tb; NAME       SUBJECT                                     RESULT---------- ---------- ---------------------------------------张三       语文                                            74张三       数学                                            83张三       物理                                            93李四       语文                                            74李四       数学                                            84李四       物理                                            94 6 rows selected SQL> commit; Commit complete SQL> SQL> select * from  2  (  3    select 姓名 as Name , '语文' Subject ,语文 Result from tb1  4    union all  5    select 姓名 as Name , '数学' Subject ,数学 Result from tb1  6    union all  7    select 姓名 as Name , '物理' Subject ,物理 Result from tb1  8  ) t  9  ; NAME       SUBJECT     RESULT---------- ------- ----------张三       语文            74李四       语文            74张三       数学            83李四       数学            84张三       物理            93李四       物理            94 6 rows selected SQL> select * from  2  (  3    select 姓名 as Name , '语文' Subject ,语文 Result from tb1  4    union all  5    select 姓名 as Name , '数学' Subject ,数学 Result from tb1  6    union all  7    select 姓名 as Name , '物理' Subject ,物理 Result from tb1  8  ) t  9  order by name; 10  SQL> SQL> select * from  2  (  3    select 姓名 as Name , '语文' Subject ,语文 Result from tb1  4    union all  5    select 姓名 as Name , '数学' Subject ,数学 Result from tb1  6    union all  7    select 姓名 as Name , '物理' Subject ,物理 Result from tb1  8  ) t  9  order by Name 10  ; NAME       SUBJECT     RESULT---------- ------- ----------李四       语文            74李四       数学            84李四       物理            94张三       物理            93张三       语文            74张三       数学            83 6 rows selected SQL> SQL> select * from  2  (  3    select 姓名 as Name , '语文' Subject ,语文 Result from tb1  4    union all  5    select 姓名 as Name , '数学' Subject ,数学 Result from tb1  6    union all  7    select 姓名 as Name , '物理' Subject ,物理 Result from tb1  8  ) t  9  order by Name 10  DESC; NAME       SUBJECT     RESULT---------- ------- ----------张三       语文            74张三       数学            83张三       物理            93李四       数学            84李四       物理            94李四       语文            74 6 rows selected SQL> SQL> select * from  2  (  3    select 姓名 as Name , '语文' Subject ,语文 Result from tb1  4    union all  5    select 姓名 as Name , '数学' Subject ,数学 Result from tb1  6    union all  7    select 姓名 as Name , '物理' Subject ,物理 Result from tb1  8  ) t  9  order by Name DESC, case Subject when '语文' then 1 when '数学' then 2 when '物理' then 3 10  --when '总分' then 4 11  end  DESC; NAME       SUBJECT     RESULT---------- ------- ----------张三       物理            93张三       数学            83张三       语文            74李四       物理            94李四       数学            84李四       语文            74 6 rows selected SQL> select * from tb; NAME       SUBJECT                                     RESULT---------- ---------- ---------------------------------------张三       语文                                            74张三       数学                                            83张三       物理                                            93李四       语文                                            74李四       数学                                            84李四       物理                                            94 6 rows selected SQL> select * from tb1; 姓名                                            语文                                      数学                                      物理---------- --------------------------------------- --------------------------------------- ---------------------------------------张三                                            74                                      83                                      93李四                                            74                                      84                                      94 SQL> SQL> select * from  2  (  3    select 姓名 as Name , '语文' Subject ,语文 Result from tb1  4    union all  5    select 姓名 as Name , '数学' Subject ,数学 Result from tb1  6    union all  7    select 姓名 as Name , '物理' Subject ,物理 Result from tb1  8    union all  9    select 姓名 as Name , '平均分' Subject , cast((语文 + 数学 + 物理)*1.0/3 as decimal(18,2)) Result from tb1 10    union all 11    select 姓名 as Name , '总分' Subject ,语文 + 数学 + 物理 Result from tb1 12  ) t 13  order by name , case Subject when '语文' then 1 when '数学' then 2 when '物理' then 3 when '平均分' then 4 when '总分' then 5 end 14  ; NAME       SUBJECT     RESULT---------- ------- ----------李四       语文            74李四       数学            84李四       物理            94李四       平均分          84李四       总分           252张三       语文            74张三       数学            83张三       物理            93张三       平均分       83.33张三       总分           250 10 rows selected SQL>  



0 0
原创粉丝点击