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

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

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

    posts - 495,  comments - 11,  trackbacks - 0

    怎么樣用left join 把行改成列

    怎么樣用left join 把行改成列
    有如下表a1

    學(xué)號(hào)???? 姓名?? 課程類型?? 學(xué)分?jǐn)?shù)
    2001?? 李四???? 公共課???????? 2
    2001?? 李四???? 專業(yè)課???????? 1
    2001?? 李四???? 公共課???????? 3
    2001?? 李四???? 專業(yè)課???????? 2

    通過查詢器查詢成
    學(xué)號(hào)???????? 姓名???? 公共課學(xué)分?jǐn)?shù)?? 專業(yè)課學(xué)分?jǐn)?shù)
    2001?????? 李四?????????? 5?????????????????????? 3

    用下面語句
    select?? 學(xué)號(hào),姓名,sum(學(xué)分?jǐn)?shù))?? as?? 公共課學(xué)分?jǐn)?shù)?? from?? A1?? where?? 課程類型='公共課'?? group?? by?? 學(xué)號(hào)
    left?? join?? .......
    后面怎么寫呢,請(qǐng)指教.要不要建個(gè)臨時(shí)表. 20 回復(fù)次數(shù):6

    第1個(gè)回答


    SQL code

    --------------------------------------------------------------------------------/*

    普通行列轉(zhuǎn)換

    (愛新覺羅.毓華 2007-11-18于海南三亞)

    假設(shè)有張學(xué)生成績表(tb)如下:

    Name Subject Result

    張三 語文  74

    張三 數(shù)學(xué)  83

    張三 物理  93

    李四 語文  74

    李四 數(shù)學(xué)  84

    李四 物理  94

    */

    -------------------------------------------------------------------------

    /*

    想變成

    姓名???????? 語文??????? 數(shù)學(xué)??????? 物理?????????

    ---------- ----------- ----------- -----------

    李四???????? 74????????? 84????????? 94

    張三???????? 74????????? 83????????? 93

    */

    create table tb

    (

    ?? Name??? varchar(10) ,

    ?? Subject varchar(10) ,

    ?? Result int

    )

    insert into tb(Name , Subject , Result) values('張三' , '語文' , 74)

    insert into tb(Name , Subject , Result) values('張三' , '數(shù)學(xué)' , 83)

    insert into tb(Name , Subject , Result) values('張三' , '物理' , 93)

    insert into tb(Name , Subject , Result) values('李四' , '語文' , 74)

    insert into tb(Name , Subject , Result) values('李四' , '數(shù)學(xué)' , 84)

    insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)

    go

    --靜態(tài)SQL,指subject只有語文、數(shù)學(xué)、物理這三門課程。

    select name 姓名,

    max(case subject when '語文' then result else 0 end) 語文,

    max(case subject when '數(shù)學(xué)' then result else 0 end) 數(shù)學(xué),

    max(case subject when '物理' then result else 0 end) 物理

    from tb

    group by name

    /*

    姓名???????? 語文??????? 數(shù)學(xué)??????? 物理?????????

    ---------- ----------- ----------- -----------

    李四???????? 74????????? 84????????? 94

    張三???????? 74????????? 83????????? 93

    */

    --動(dòng)態(tài)SQL,指subject不止語文、數(shù)學(xué)、物理這三門課程。

    declare @sql varchar(8000)

    set @sql = 'select Name as ' + '姓名'

    select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'

    from (select distinct Subject from tb) as a

    set @sql = @sql + ' from tb group by name'

    exec(@sql)

    /*

    姓名???????? 數(shù)學(xué)??????? 物理??????? 語文?????????

    ---------- ----------- ----------- -----------

    李四???????? 84????????? 94????????? 74

    張三???????? 83????????? 93????????? 74

    */

    -------------------------------------------------------------------

    /*加個(gè)平均分,總分

    姓名???????? 語文??????? 數(shù)學(xué)??????? 物理??????? 平均分??????????????? 總分?????????

    ---------- ----------- ----------- ----------- -------------------- -----------

    李四???????? 74????????? 84????????? 94????????? 84.00??????????????? 252

    張三???????? 74????????? 83????????? 93????????? 83.33??????????????? 250

    */

    --靜態(tài)SQL,指subject只有語文、數(shù)學(xué)、物理這三門課程。

    select name 姓名,

    max(case subject when '語文' then result else 0 end) 語文,

    max(case subject when '數(shù)學(xué)' then result else 0 end) 數(shù)學(xué),

    max(case subject when '物理' then result else 0 end) 物理,

    cast(avg(result*1.0) as decimal(18,2)) 平均分,

    sum(result) 總分

    from tb

    group by name

    /*

    姓名???????? 語文??????? 數(shù)學(xué)??????? 物理??????? 平均分??????????????? 總分?????????

    ---------- ----------- ----------- ----------- -------------------- -----------

    李四???????? 74????????? 84????????? 94????????? 84.00??????????????? 252

    張三???????? 74????????? 83????????? 93????????? 83.33??????????????? 250

    */

    --動(dòng)態(tài)SQL,指subject不止語文、數(shù)學(xué)、物理這三門課程。

    declare @sql1 varchar(8000)

    set @sql1 = 'select Name as ' + '姓名'

    select @sql1 = @sql1 + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'

    from (select distinct Subject from tb) as a

    set @sql1 = @sql1 + ' , cast(avg(result*1.0) as decimal(18,2)) 平均分,sum(result) 總分 from tb group by name'

    exec(@sql1)

    /*

    姓名???????? 數(shù)學(xué)??????? 物理??????? 語文??????? 平均分??????????????? 總分?????????

    ---------- ----------- ----------- ----------- -------------------- -----------

    李四???????? 84????????? 94????????? 74????????? 84.00??????????????? 252

    張三???????? 83????????? 93????????? 74????????? 83.33??????????????? 250

    */

    drop table tb???

    ---------------------------------------------------------

    ---------------------------------------------------------

    /*

    如果上述兩表互相換一下:即

    姓名 語文 數(shù)學(xué) 物理

    張三 74  83  93

    李四 74  84  94

    想變成

    Name?????? Subject Result?????

    ---------- ------- -----------

    李四???????? 語文????? 74

    李四???????? 數(shù)學(xué)????? 84

    李四???????? 物理????? 94

    張三???????? 語文????? 74

    張三???????? 數(shù)學(xué)????? 83

    張三???????? 物理????? 93

    */

    create table tb1

    (

    ?? 姓名 varchar(10) ,

    ?? 語文 int ,

    ?? 數(shù)學(xué) int ,

    ?? 物理 int

    )

    insert into tb1(姓名 , 語文 , 數(shù)學(xué) , 物理) values('張三',74,83,93)

    insert into tb1(姓名 , 語文 , 數(shù)學(xué) , 物理) values('李四',74,84,94)

    select * from

    (

    select 姓名 as Name , Subject = '語文' , Result = 語文 from tb1

    union all

    select 姓名 as Name , Subject = '數(shù)學(xué)' , Result = 數(shù)學(xué) from tb1

    union all

    select 姓名 as Name , Subject = '物理' , Result = 物理 from tb1

    ) t

    order by name , case Subject when '語文' then 1 when '數(shù)學(xué)' then 2 when '物理' then 3 when '總分' then 4 end

    --------------------------------------------------------------------

    /*加個(gè)平均分,總分

    Name?????? Subject???? Result??????????????

    ---------- -------??? --------------------

    李四???????? 語文????? 74.00

    李四???????? 數(shù)學(xué)????? 84.00

    李四???????? 物理????? 94.00

    李四???????? 平均分??? 84.00

    李四???????? 總分????? 252.00

    張三???????? 語文????? 74.00

    張三???????? 數(shù)學(xué)????? 83.00

    張三???????? 物理????? 93.00

    張三???????? 平均分??? 83.33

    張三???????? 總分????? 250.00

    */

    select * from

    (

    select 姓名 as Name , Subject = '語文' , Result = 語文 from tb1

    union all

    select 姓名 as Name , Subject = '數(shù)學(xué)' , Result = 數(shù)學(xué) from tb1

    union all

    select 姓名 as Name , Subject = '物理' , Result = 物理 from tb1

    union all

    select 姓名 as Name , Subject = '平均分' , Result = cast((語文 + 數(shù)學(xué) + 物理)*1.0/3 as decimal(18,2)) from tb1

    union all

    select 姓名 as Name , Subject = '總分'
    , Result = 語文 + 數(shù)學(xué) + 物理 from tb1 ) t order by name , case Subject when '語文' then 1 when '數(shù)學(xué)' then 2 when '物理' then 3 when '平均分' then 4 when '總分' then 5 end drop table tb1


    --------------------------------------------------------------------------------

    第2個(gè)回答
    有如下表a1??

    學(xué)號(hào)?????????? 姓名?????? 課程類型?????? 學(xué)分?jǐn)?shù)??
    2001?????? 李四?????????? 公共課?????????????????? 2??
    2001?????? 李四?????????? 專業(yè)課?????????????????? 1??
    2001?????? 李四?????????? 公共課?????????????????? 3??
    2001?????? 李四?????????? 專業(yè)課?????????????????? 2??

    通過查詢器查詢成??
    學(xué)號(hào)?????????????????? 姓名?????????? 公共課學(xué)分?jǐn)?shù)?????? 專業(yè)課學(xué)分?jǐn)?shù)??
    2001?????????????? 李四?????????????????????? 5?????????????????????????????????????????????? 3??

    用下面語句??
    select?????? 學(xué)號(hào),姓名,sum(學(xué)分?jǐn)?shù))?????? as?????? 公共課學(xué)分?jǐn)?shù)?????? from?????? A1?????? where?????? 課程類型='公共課'?????? group?????? by?????? 學(xué)號(hào)??
    left?????? join?????? .......??
    后面怎么寫呢,請(qǐng)指教.要不要建個(gè)臨時(shí)表.??


    SQL code

    --------------------------------------------------------------------------------select 學(xué)號(hào),姓名,

    sum(case 課程類型 when '公共課' then 學(xué)分?jǐn)?shù) else 0 end) 公共課學(xué)分?jǐn)?shù),

    sum(case 課程類型 when '專業(yè)課' then 學(xué)分?jǐn)?shù) else 0 end) 專業(yè)課學(xué)分?jǐn)?shù)

    from tb

    group by 學(xué)號(hào),姓名

    --------------------------------------------------------------------------------

    第3個(gè)回答


    SQL code

    ----------------------------------------------------------------------------------靜態(tài)SQL,指課程類型只有公共課,專業(yè)課

    select 學(xué)號(hào),姓名,

    sum(case 課程類型 when '公共課' then 學(xué)分?jǐn)?shù) else 0 end) 公共課學(xué)分?jǐn)?shù),

    sum(case 課程類型 when '專業(yè)課' then 學(xué)分?jǐn)?shù) else 0 end) 專業(yè)課學(xué)分?jǐn)?shù)

    from tb

    group by 學(xué)號(hào),姓名

    --靜態(tài)SQL,指課程類型不止公共課,專業(yè)課

    declare @sql varchar(8000)

    set @sql = 'select 學(xué)號(hào),姓名'

    select @sql = @sql1 + ' , sum(case 課程類型 when ''' + 課程類型 + ''' then 學(xué)分?jǐn)?shù) else 0 end) [' + 課程類型 + '學(xué)分?jǐn)?shù)]'

    from (select distinct 課程類型 from tb) as a

    set @sql = @sql + ' from tb group by 學(xué)號(hào),姓名'

    exec(@sql)

    --------------------------------------------------------------------------------

    第4個(gè)回答


    SQL code

    --------------------------------------------------------------------------------create table tb(學(xué)號(hào) int,姓名 varchar(10),課程類型 varchar(10),學(xué)分?jǐn)?shù) int)

    insert tb select 2001,'李四','公共課',2

    union all select 2001,'李四','專業(yè)課',1

    union all select 2001,'李四','公共課',3

    union all select 2001,'李四','專業(yè)課',2

    select 學(xué)號(hào),姓名,

    ?????? 公共課=sum(case 課程類型 when '公共課' then 學(xué)分?jǐn)?shù) else 0 end),

    ?????? 專業(yè)課=sum(case 課程類型 when '專業(yè)課' then 學(xué)分?jǐn)?shù) else 0 end)

    from tb

    group by 學(xué)號(hào),姓名

    --動(dòng)態(tài)SQL

    declare @sql varchar(4000)

    select @sql='select 學(xué)號(hào),姓名'

    select @sql=@sql+',['+課程類型+']=sum(case 課程類型 when '''+課程類型+''' then 學(xué)分?jǐn)?shù) else 0 end)'

    from tb group by 課程類型

    exec(@sql+N' from tb group by 學(xué)號(hào),姓名')

    drop table tb

    /*

    學(xué)號(hào)????????? 姓名???????? 公共課???????? 專業(yè)課????????

    ----------- ---------- ----------- -----------

    2001??????? 李四???????? 5?????????? 3

    */

    --------------------------------------------------------------------------------

    第5個(gè)回答
    select???? 學(xué)號(hào),姓名,
    sum(decode(課程類型,'公共課',?? 學(xué)分?jǐn)?shù),?? 0)?? 公共課學(xué)分?jǐn)?shù),
    sum(decode(課程類型,?? '專業(yè)課',學(xué)分?jǐn)?shù),?? 0)?? 專業(yè)課學(xué)分?jǐn)?shù)
    from?? tb
    group?? by?? 學(xué)號(hào),姓名

    posted on 2008-04-08 21:49 jadmin 閱讀(114) 評(píng)論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 野花高清在线电影观看免费视频| 国产在线观看免费视频播放器| 亚洲中文字幕AV在天堂| 国产男女猛烈无遮挡免费视频| 91av免费在线视频| 亚洲黄色在线电影| 国产色婷婷精品免费视频| a毛片免费观看完整| 久久精品亚洲中文字幕无码麻豆| 成年女人免费v片| 久久国产精品国产自线拍免费| 亚洲欧美日韩中文二区| 亚洲国产精品嫩草影院在线观看| 中国在线观看免费高清完整版| 美女被免费网站视频在线| 亚洲一区二区三区高清| 免费国产不卡午夜福在线| 98精品全国免费观看视频| 特级毛片全部免费播放| 亚洲日韩在线视频| 亚洲自偷自偷在线制服| 成人免费看黄20分钟| 99久久国产精品免费一区二区| 亚洲精品无码日韩国产不卡av| 国产亚洲av片在线观看播放| 夫妻免费无码V看片| 香蕉成人免费看片视频app下载 | 日本精品久久久久久久久免费| 亚洲精品**中文毛片| 亚洲自偷自偷在线制服| 国产一区视频在线免费观看| 69式国产真人免费视频| 最近免费mv在线观看动漫| 美女视频黄频a免费大全视频| 亚洲乱码卡三乱码新区| 久久久久亚洲AV无码专区首| 亚洲第一黄片大全| 日本成人在线免费观看| 黄页免费的网站勿入免费直接进入| 国内精品免费在线观看| 全部一级一级毛片免费看|