隨筆-199  評論-203  文章-11  trackbacks-0

          問題: 假設有張學生成績表(Test)如下
                 Name Subject Result
                 張三 語文 80
                 張三 數學 90
                 張三 物理 85
                 李四 語文 85
                 李四 數學 92
                 李四 物理 82
           
          結果:
                 姓名 語文 數學 物理
                 張三 80 90 85
                 李四 85 92 82

          DROP TABLE Test
          create table Test(Name varchar(10),Subject Varchar(10),Result int)
          insert Test
          select '張三','語文',80 union all
          select '張三','數學',90 union all
          select '張三','物理',85 union all
          select '李四','語文',85 union all
          select '李四','數學',92 union all
          select '李四','物理',82
          go

          SELECT * FROM Test
           
          --用於多行的轉換
          declare @sql varchar(4000)
          set @sql = 'select Name'
          select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
          from (select distinct Subject from test) as a
          select @sql = @sql+' from test group by name'
                 exec(@sql)

          --如果行數少這個看起來更加明瞭
          select Name as 姓名,
           sum(case Subject when '數學' then Result end) [數學],
           sum(case Subject when '物理' then Result end) [物理],
           sum(case Subject when '語文' then Result end) [語文]
          from Test group by name

          我以前面試的時候考試過這種類似的題,也是我們在編程開發過程中經常遇到的一種常見題,我的分析希望對大家有幫助。


           

          posted on 2009-02-20 15:05 Werther 閱讀(337) 評論(0)  編輯  收藏 所屬分類: 15.SQL Server
          主站蜘蛛池模板: 鲁甸县| 会泽县| 湖北省| 潮安县| 临泉县| 石嘴山市| 高要市| 康马县| 陕西省| 桐柏县| 九寨沟县| 富蕴县| 高邑县| 新闻| 邮箱| 武安市| 富宁县| 深泽县| 罗甸县| 揭东县| 萍乡市| 长泰县| 彰武县| 商洛市| 榕江县| 磐安县| 福泉市| 林甸县| 西畴县| 吕梁市| 安仁县| 习水县| 曲周县| 万年县| 屯昌县| 九龙城区| 瓦房店市| 定远县| 濮阳县| 福泉市| 来宾市|