<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    我的漫漫程序之旅

    專注于JavaWeb開發(fā)
    隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
    數(shù)據(jù)加載中……

    簡單的行列互轉(zhuǎn)問題

    --行列互轉(zhuǎn)
    /******************************************************************************************************************************************************
    以學生成績?yōu)槔樱容^形象易懂

    整理人:中國風(Roy)

    日期:2008.06.06
    *****************************************************************************************************************************************************
    */


    --1、行互列
    --
    > --> (Roy)生成測試數(shù)據(jù)
     
    if not object_id('Class'is null
        
    drop table Class
    Go
    Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)
    Insert Class
    select N'張三',N'語文',78 union all
    select N'張三',N'數(shù)學',87 union all
    select N'張三',N'英語',82 union all
    select N'張三',N'物理',90 union all
    select N'李四',N'語文',65 union all
    select N'李四',N'數(shù)學',77 union all
    select N'李四',N'英語',65 union all
    select N'李四',N'物理',85 
    Go
    --2000方法:
    動態(tài):

    declare @s nvarchar(4000)
    set @s=''
    Select     @s=@s+','+quotename([Course])+'=max(case when [Course]='+quotename([Course],'''')+' then [Score] else 0 end)'
    from Class group by[Course]
    exec('select [Student]'+@s+' from Class group by [Student]')


    生成靜態(tài):

    select 
        
    [Student],
        
    [數(shù)學]=max(case when [Course]='數(shù)學' then [Score] else 0 end),
        
    [物理]=max(case when [Course]='物理' then [Score] else 0 end),
        
    [英語]=max(case when [Course]='英語' then [Score] else 0 end),
        
    [語文]=max(case when [Course]='語文' then [Score] else 0 end
    from 
        Class 
    group by [Student]

    GO
    動態(tài):

    declare @s nvarchar(4000)
    Select     @s=isnull(@s+',','')+quotename([Course]from Class group by[Course]
    exec('select * from Class pivot (max([Score]) for [Course] in('+@s+'))b')

    生成靜態(tài):
    select * 
    from 
        Class 
    pivot 
        (
    max([Score]for [Course] in([數(shù)學],[物理],[英語],[語文]))b

    生成格式:
    /*
    Student 數(shù)學          物理          英語          語文
    ------- ----------- ----------- ----------- -----------
    李四      77          85          65          65
    張三      87          90          82          78

    (2 行受影響)
    */


    ------------------------------------------------------------------------------------------
    go
    --加上總成績(學科平均分)

    --2000方法:
    動態(tài):

    declare @s nvarchar(4000)
    set @s=''
    Select     @s=@s+','+quotename([Course])+'=max(case when [Course]='+quotename([Course],'''')+' then [Score] else 0 end)'
    from Class group by[Course]
    exec('select [Student]'+@s+',[總成績]=sum([Score])  from Class group by [Student]')--加多一列(學科平均分用avg([Score]))

    生成動態(tài):

    select 
        
    [Student],
        
    [數(shù)學]=max(case when [Course]='數(shù)學' then [Score] else 0 end),
        
    [物理]=max(case when [Course]='物理' then [Score] else 0 end),
        
    [英語]=max(case when [Course]='英語' then [Score] else 0 end),
        
    [語文]=max(case when [Course]='語文' then [Score] else 0 end),
        
    [總成績]=sum([Score]--加多一列(學科平均分用avg([Score]))
    from 
        Class 
    group by [Student]

    go

    --2005方法:

    動態(tài):

    declare @s nvarchar(4000)
    Select     @s=isnull(@s+',','')+quotename([Course]from Class group by[Course] --isnull(@s+',','') 去掉字符串@s中第一個逗號
    exec('select [Student],'+@s+',[總成績] from (select *,[總成績]=sum([Score])over(partition by [Student]) from Class) a 
    pivot (max([Score]) for [Course] in(
    '+@s+'))b ')

    生成靜態(tài):

    select 
        
    [Student],[數(shù)學],[物理],[英語],[語文],[總成績] 
    from 
        (
    select *,[總成績]=sum([Score])over(partition by [Student]from Class) a --平均分時用avg([Score])
    pivot 
        (
    max([Score]for [Course] in([數(shù)學],[物理],[英語],[語文]))b 

    生成格式:

    /*
    Student 數(shù)學          物理          英語          語文          總成績
    ------- ----------- ----------- ----------- ----------- -----------
    李四      77          85          65          65          292
    張三      87          90          82          78          337

    (2 行受影響)
    */


    go

    --2、列轉(zhuǎn)行
    --
    > --> (Roy)生成測試數(shù)據(jù)
     
    if not object_id('Class'is null
        
    drop table Class
    Go
    Create table Class([Student] nvarchar(2),[數(shù)學] int,[物理] int,[英語] int,[語文] int)
    Insert Class
    select N'李四',77,85,65,65 union all
    select N'張三',87,90,82,78
    Go

    --2000:

    動態(tài):

    declare @s nvarchar(4000)
    select @s=isnull(@s+' union all ','')+'select [Student],[Course]='+quotename(Name,'''')--isnull(@s+' union all ','') 去掉字符串@s中第一個union all
    +',[Score]='+quotename(Name)+' from Class'
    from syscolumns where ID=object_id('Class'and Name not in('Student')--排除不轉(zhuǎn)換的列
    order by Colid
    exec('select * from ('+@s+')t order by [Student],[Course]')--增加一個排序

    生成靜態(tài):
    select * 
    from (select [Student],[Course]='數(shù)學',[Score]=[數(shù)學] from Class union all 
    select [Student],[Course]='物理',[Score]=[物理] from Class union all 
    select [Student],[Course]='英語',[Score]=[英語] from Class union all 
    select [Student],[Course]='語文',[Score]=[語文] from Class)t 
    order by [Student],[Course]

    go
    --2005:

    動態(tài):

    declare @s nvarchar(4000)
    select @s=isnull(@s+',','')+quotename(Name)
    from syscolumns where ID=object_id('Class'and Name not in('Student'
    order by Colid
    exec('select Student,[Course],[Score] from Class unpivot ([Score] for [Course] in('+@s+'))b')

    go
    select 
        Student,
    [Course],[Score] 
    from 
        Class 
    unpivot 
        (
    [Score] for [Course] in([數(shù)學],[物理],[英語],[語文]))b

    生成格式:
    /*
    Student Course Score
    ------- ------- -----------
    李四      數(shù)學      77
    李四      物理      85
    李四      英語      65
    李四      語文      65
    張三      數(shù)學      87
    張三      物理      90
    張三      英語      82
    張三      語文      78

    (8 行受影響)
    */
    原帖地址

    posted on 2008-06-23 15:08 々上善若水々 閱讀(421) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

    主站蜘蛛池模板: 亚洲精品无码久久毛片波多野吉衣| 一个人看的免费观看日本视频www| 韩国亚洲伊人久久综合影院| 最近免费字幕中文大全| 24小时日本在线www免费的| 激情综合色五月丁香六月亚洲| 亚洲第一男人天堂| 9277手机在线视频观看免费| 久久久久亚洲精品天堂久久久久久| 亚洲av极品无码专区在线观看| 成人免费乱码大片A毛片| 青青草国产免费久久久下载| 国产V亚洲V天堂A无码| 亚洲国产成人久久综合一区| 国产精品福利在线观看免费不卡| 91成年人免费视频| 久久亚洲AV无码精品色午夜| 永久免费AV无码网站国产| 亚洲熟妇少妇任你躁在线观看无码| 亚洲av无码不卡久久| 99热这里有免费国产精品| 综合亚洲伊人午夜网 | 黄 色一级 成 人网站免费| 女人张开腿给人桶免费视频 | 亚洲一卡2卡4卡5卡6卡在线99 | 国产成人无码区免费A∨视频网站| 亚洲中文字幕无码亚洲成A人片| 最近的中文字幕大全免费8| 亚洲一区二区三区电影| 久久免费福利视频| 亚洲欧洲国产经精品香蕉网| 久久综合AV免费观看| 亚洲熟妇无码八V在线播放| 免费无码成人AV片在线在线播放| 激情亚洲一区国产精品| 成年美女黄网站18禁免费| 亚洲日产乱码一二三区别 | 亚洲va在线va天堂va四虎| 无码人妻一区二区三区免费| 美女被免费网站视频在线| 亚洲成在人线av|