普通行列轉(zhuǎn)換(轉(zhuǎn)載)

          Posted on 2008-12-24 18:54 橡皮人 閱讀(253) 評論(0)  編輯  收藏
          /*
          普通行列轉(zhuǎn)換
          (愛新覺羅.毓華 2007-11-18于海南三亞)

          假設(shè)有張學(xué)生成績表(tb)如下:
          Name Subject Result
          張三 語文  74
          張三 數(shù)學(xué)  83
          張三 物理  93
          李四 語文  74
          李四 數(shù)學(xué)  84
          李四 物理  94
          */

          -------------------------------------------------------------------------
          /*
          想變成
          姓名 語文 數(shù)學(xué) 物理
          ---------- ----------- ----------- -----------
          李四 74 84 94
          張三 74 83 93
          */
          1. create table tb  
          2. (  
          3.    Name    varchar(10) ,  
          4.    Subject varchar(10) ,  
          5.    Result  int  
          6. )  
          7.   
          8. insert into tb(Name , Subject , Result) values('張三' , '語文' , 74)  
          9. insert into tb(Name , Subject , Result) values('張三' , '數(shù)學(xué)' , 83)  
          10. insert into tb(Name , Subject , Result) values('張三' , '物理' , 93)  
          11. insert into tb(Name , Subject , Result) values('李四' , '語文' , 74)  
          12. insert into tb(Name , Subject , Result) values('李四' , '數(shù)學(xué)' , 84)  
          13. insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)  
          14. go  
          15.   
          16. --靜態(tài)SQL,指subject只有語文、數(shù)學(xué)、物理這三門課程。  
          17. select name 姓名,  
          18.   max(case subject when '語文' then result else 0 end) 語文,  
          19.   max(case subject when '數(shù)學(xué)' then result else 0 end) 數(shù)學(xué),  
          20.   max(case subject when '物理' then result else 0 end) 物理  
          21. from tb  
          22. group by name  
          /*
          姓名 語文 數(shù)學(xué) 物理
          ---------- ----------- ----------- -----------
          李四 74 84 94
          張三 74 83 93
          */
          1. --動態(tài)SQL,指subject不止語文、數(shù)學(xué)、物理這三門課程。  
          2. declare @sql varchar(8000)  
          3. set @sql = 'select Name as ' + '姓名'  
          4. select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'  
          5. from (select distinct Subject from tb) as a  
          6. set @sql = @sql + ' from tb group by name'  
          7. exec(@sql)   
          /*
          姓名 數(shù)學(xué) 物理 語文
          ---------- ----------- ----------- -----------
          李四 84 94 74
          張三 83 93 74
          */

          -------------------------------------------------------------------
          /*加個平均分,總分
          姓名 語文 數(shù)學(xué) 物理 平均分 總分
          ---------- ----------- ----------- ----------- -------------------- -----------
          李四 74 84 94 84.00 252
          張三 74 83 93 83.33 250
          */
          1. --靜態(tài)SQL,指subject只有語文、數(shù)學(xué)、物理這三門課程。  
          2. select name 姓名,  
          3.   max(case subject when '語文' then result else 0 end) 語文,  
          4.   max(case subject when '數(shù)學(xué)' then result else 0 end) 數(shù)學(xué),  
          5.   max(case subject when '物理' then result else 0 end) 物理,  
          6.   cast(avg(result*1.0) as decimal(18,2)) 平均分,  
          7.   sum(result) 總分  
          8. from tb  
          9. group by name  
          /*
          姓名 語文 數(shù)學(xué) 物理 平均分 總分
          ---------- ----------- ----------- ----------- -------------------- -----------
          李四 74 84 94 84.00 252
          張三 74 83 93 83.33 250
          */
          1. --動態(tài)SQL,指subject不止語文、數(shù)學(xué)、物理這三門課程。  
          2. declare @sql1 varchar(8000)  
          3. set @sql1 = 'select Name as ' + '姓名'  
          4. select @sql1 = @sql1 + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'  
          5. from (select distinct Subject from tb) as a  
          6. set @sql1 = @sql1 + ' , cast(avg(result*1.0) as decimal(18,2)) 平均分,sum(result) 總分 from tb group by name'  
          7. exec(@sql1)   
          /*
          姓名 數(shù)學(xué) 物理 語文 平均分 總分
          ---------- ----------- ----------- ----------- -------------------- -----------
          李四 84 94 74 84.00 252
          張三 83 93 74 83.33 250
          */

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          posts - 28, comments - 5, trackbacks - 0, articles - 0

          Copyright © 橡皮人

          主站蜘蛛池模板: 忻城县| 漳平市| 苗栗市| 清原| 新沂市| 子长县| 陇西县| 苏尼特左旗| 虹口区| 福建省| 磐安县| 北京市| 勐海县| 商丘市| 通化市| 谢通门县| 临颍县| 连南| 林甸县| 土默特右旗| 宜君县| 泉州市| 夏邑县| 柞水县| 葫芦岛市| 澄迈县| 商洛市| 贺兰县| 额济纳旗| 株洲市| 桂阳县| 水城县| 三原县| 黔西县| 巴中市| 临海市| 军事| 潮州市| 阳谷县| 滨海县| 牡丹江市|