<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é)生成績(jī)表(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 閱讀(113) 評(píng)論(0)  編輯  收藏

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 成人免费视频国产| 最近中文字幕mv免费高清视频8| 日韩毛片免费无码无毒视频观看| 亚洲成a人片在线观看无码 | 嫩草成人永久免费观看 | 337p日本欧洲亚洲大胆色噜噜| 国产亚洲精品免费视频播放 | 麻豆亚洲AV永久无码精品久久 | 成人免费777777| 亚洲美国产亚洲AV| 国产免费牲交视频| 一级片在线免费看| 人人狠狠综合久久亚洲88| 国产免费一区二区三区在线观看| 亚洲av日韩av无码| 久草在视频免费福利| 亚洲国产成人久久精品软件| 国产一级淫片免费播放电影| 一个人看的免费观看日本视频www 一个人看的免费视频www在线高清动漫 | 久久久久久久岛国免费播放| 久久精品国产亚洲av麻豆小说| 嫖丰满老熟妇AAAA片免费看| 亚洲精品精华液一区二区| mm1313亚洲国产精品美女| 大妹子影视剧在线观看全集免费| 亚洲成AV人片在线观看ww| 日日麻批免费40分钟日本的| 亚洲第一第二第三第四第五第六| 亚洲成aⅴ人片久青草影院| 国产成人免费AV在线播放| 亚洲综合色一区二区三区小说| 成年女人午夜毛片免费看| 五月婷婷免费视频| 99精品全国免费观看视频..| 亚洲国产美国国产综合一区二区| 日韩版码免费福利视频| 一级女性全黄久久生活片免费| 亚洲最新视频在线观看| 韩国欧洲一级毛片免费| 中国极品美軳免费观看| 国产精品亚洲午夜一区二区三区 |