/*
          普通行列轉(zhuǎn)換
          (愛(ài)新覺(jué)羅.毓華 2007-11-18于海南三亞)

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

          -------------------------------------------------------------------------
          /*
          想變成
          姓名 語(yǔ)文 數(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('張三' , '語(yǔ)文' , 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('李四' , '語(yǔ)文' , 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只有語(yǔ)文、數(shù)學(xué)、物理這三門課程。  
          17. select name 姓名,  
          18.   max(case subject when '語(yǔ)文' then result else 0 end) 語(yǔ)文,  
          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  
          /*
          姓名 語(yǔ)文 數(shù)學(xué) 物理
          ---------- ----------- ----------- -----------
          李四 74 84 94
          張三 74 83 93
          */
          1. --動(dòng)態(tài)SQL,指subject不止語(yǔ)文、數(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é) 物理 語(yǔ)文
          ---------- ----------- ----------- -----------
          李四 84 94 74
          張三 83 93 74
          */

          -------------------------------------------------------------------
          /*加個(gè)平均分,總分
          姓名 語(yǔ)文 數(shù)學(xué) 物理 平均分 總分
          ---------- ----------- ----------- ----------- -------------------- -----------
          李四 74 84 94 84.00 252
          張三 74 83 93 83.33 250
          */
          1. --靜態(tài)SQL,指subject只有語(yǔ)文、數(shù)學(xué)、物理這三門課程。  
          2. select name 姓名,  
          3.   max(case subject when '語(yǔ)文' then result else 0 end) 語(yǔ)文,  
          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  
          /*
          姓名 語(yǔ)文 數(shù)學(xué) 物理 平均分 總分
          ---------- ----------- ----------- ----------- -------------------- -----------
          李四 74 84 94 84.00 252
          張三 74 83 93 83.33 250
          */
          1. --動(dòng)態(tài)SQL,指subject不止語(yǔ)文、數(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é) 物理 語(yǔ)文 平均分 總分
          ---------- ----------- ----------- ----------- -------------------- -----------
          李四 84 94 74 84.00 252
          張三 83 93 74 83.33 250
          */

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


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

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

          Copyright © 橡皮人

          主站蜘蛛池模板: 昭觉县| 沙河市| 巴彦县| 莱芜市| 四子王旗| 合肥市| 连南| 承德县| 浏阳市| 工布江达县| 江山市| 南溪县| 信宜市| 常德市| 桐庐县| 巫山县| 宾阳县| 邳州市| 利津县| 苏尼特右旗| 商丘市| 竹山县| 泊头市| 册亨县| 七台河市| 漳平市| 长顺县| 阜新市| 湖南省| 饶阳县| 响水县| 城口县| 安多县| 枣庄市| 荣昌县| 望都县| 柏乡县| 肃北| 湾仔区| 陈巴尔虎旗| 苍溪县|