普通行列轉換(轉載)

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

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

          -------------------------------------------------------------------------
          /*
          想變成
          姓名 語文 數學 物理
          ---------- ----------- ----------- -----------
          李四 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('張三' , '數學' , 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('李四' , '數學' , 84)  
          13. insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)  
          14. go  
          15.   
          16. --靜態SQL,指subject只有語文、數學、物理這三門課程。  
          17. select name 姓名,  
          18.   max(case subject when '語文' then result else 0 end) 語文,  
          19.   max(case subject when '數學' then result else 0 end) 數學,  
          20.   max(case subject when '物理' then result else 0 end) 物理  
          21. from tb  
          22. group by name  
          /*
          姓名 語文 數學 物理
          ---------- ----------- ----------- -----------
          李四 74 84 94
          張三 74 83 93
          */
          1. --動態SQL,指subject不止語文、數學、物理這三門課程。  
          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)   
          /*
          姓名 數學 物理 語文
          ---------- ----------- ----------- -----------
          李四 84 94 74
          張三 83 93 74
          */

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

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


          網站導航:
           

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

          Copyright © 橡皮人

          主站蜘蛛池模板: 富裕县| 靖西县| 吴忠市| 三门县| 阿拉善左旗| 平原县| 太白县| 巴东县| 拉萨市| 天气| 灌南县| 平原县| 万载县| 龙江县| 额尔古纳市| 仙游县| 阜宁县| 巍山| 武鸣县| 大新县| 杨浦区| 汉阴县| 灌南县| 洛浦县| 修水县| 独山县| 桐庐县| 天峨县| 高尔夫| 海伦市| 西平县| 疏附县| 西青区| 沛县| 龙游县| 南川市| 察哈| 宁蒗| 左权县| 武邑县| 视频|