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

          問題: 假設(shè)有張學(xué)生成績表(Test)如下
                 Name Subject Result
                 張三 語文 80
                 張三 數(shù)學(xué) 90
                 張三 物理 85
                 李四 語文 85
                 李四 數(shù)學(xué) 92
                 李四 物理 82
           
          結(jié)果:
                 姓名 語文 數(shù)學(xué) 物理
                 張三 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 '張三','數(shù)學(xué)',90 union all
          select '張三','物理',85 union all
          select '李四','語文',85 union all
          select '李四','數(shù)學(xué)',92 union all
          select '李四','物理',82
          go

          SELECT * FROM Test
           
          --用於多行的轉(zhuǎn)換
          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)

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

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


           

          posted on 2009-02-20 15:05 Werther 閱讀(337) 評論(0)  編輯  收藏 所屬分類: 15.SQL Server
          主站蜘蛛池模板: 中西区| 淄博市| 新龙县| 张北县| 墨竹工卡县| 洪泽县| 安仁县| 北宁市| 那坡县| 桃江县| 班戈县| 台南市| 股票| 宁河县| 鄂伦春自治旗| 南岸区| 吉木萨尔县| 松原市| 山西省| 广西| 西吉县| 江油市| 黄山市| 临汾市| 文山县| 鹤山市| 阳东县| 峨边| 通山县| 斗六市| 定远县| 武宣县| 隆化县| 舒城县| 石河子市| 昌图县| 松溪县| 原阳县| 蕲春县| 成武县| 洞口县|