oracle sql 行轉列

-- Create table
/*create table TEST_TABLE
(
  STUDENT VARCHAR2(200),
  SUBJECT VARCHAR2(200),
  GRADE   NUMBER
)
tablespace SYSTEM
  pctfree 10
  pctused 40
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
*/
/*
insert into test_table(student , Subject , grade) values('張三' , '語文' , 80);
insert into test_table(student , Subject , grade) values('張三' , '數學' , 70);
insert into test_table(student , Subject , grade) values('張三' , '英語' , 60);
insert into test_table(student , Subject , grade) values('李四' , '語文' , 100);
insert into test_table(student , Subject , grade) values('李四' , '數學' , 80);
insert into test_table(student , Subject , grade) values('李四' , '英語' , 90);


*/
--oracle中Decode()函數使用 然後將這些累計求和(sum部分)
select t.student AS 姓名,sum(decode(t.subject,'語文',grade,null))語文 
,sum(decode(t.subject,'數學',grade,null)) 數學
,Sum(Decode(T.Subject,'英語',Grade,Null)) 英語 
from test_table t group by student; 




--靜態SQL,指subject只有語文、數學、英語這三門課程。
select student 姓名,
  max(case subject when '語文' then grade else 0 end) 語文,
  max(case subject when '數學' then grade else 0 end) 數學,
  Max(Case Subject When '英語' Then Grade Else 0 End) 英語
from test_table group by student;
/*
姓名         語文        數學        英語         
---------- ----------- ----------- -----------
李四         100          80          90
張三         80           70          60
*/
--動態SQL,指subject不止語文、數學、英語這三門課程。 sql server  下測試
declare @sql varchar(8000)
set @sql = 'select student as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then grade else 0 end) [' + Subject + ']'
from (select distinct Subject from test_table) as a
set @sql = @sql + ' from test_table group by student'
exec(@sql)




having子句可以過濾組函數結果或是分組的信息,且寫在group by子句後 模糊查詢 以及排序
select username,userno,userpassword from userinfo t where  username like '%a%' 
 group  by username,userno,userpassword  having(userno)>40 order by username desc




數量關係:   多對一關係 一對多關係   一對一關係  多對多關係
第一範式,所有的屬性都必須是單值,也就是屬性只表示單一的意義。(記錄可以重複,沒有任何限制)
第二範式,屬性要求唯一且非空,(記錄不可重複,但是數據可能會出現冗餘)。
第三範式,非主屬性只能依賴於主屬性,不能依賴於其他非主屬性。(解決數據冗餘問題)


一個表中只能存儲一個long類型 Clob 存儲大的文本對象   Blob 存儲大的二進制對象

Oralce支持級聯刪除,不支持級聯更新


轉載來自:http://www.cnblogs.com/Warmsunshine/archive/2013/07/13/3188715.html


另外,有幾個相關的參靠資料:

sum函數:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions163.htm

decode函數:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章