<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)航:
     
    主站蜘蛛池模板: 亚洲国产精品一区二区三区久久 | 国产精品亚洲自在线播放页码| 中文字幕乱码系列免费| 免费看小12萝裸体视频国产| 亚洲日韩精品无码专区加勒比 | 无码专区AAAAAA免费视频| 久久亚洲春色中文字幕久久久| 精品久久久久久无码免费| 日韩亚洲变态另类中文| 久久精品免费网站网| 国产日韩亚洲大尺度高清| 久久免费精彩视频| 亚洲性69影院在线观看| 99久久99这里只有免费费精品| 久久精品国产亚洲AV蜜臀色欲 | 在线aⅴ亚洲中文字幕| 日韩亚洲人成网站| 亚洲男人av香蕉爽爽爽爽| 亚洲一区二区三区四区在线观看| 久久久久久AV无码免费网站下载| 久久精品国产亚洲AV香蕉| 亚洲精品免费网站| 国产精品无码亚洲精品2021| 亚洲日韩VA无码中文字幕| 美女被cao网站免费看在线看| 亚洲精品中文字幕乱码| 永久在线毛片免费观看| 国产乱妇高清无乱码免费| 久久久久久亚洲Av无码精品专口| 成人无码区免费视频观看 | 免费观看激色视频网站(性色)| 亚洲色一区二区三区四区| 亚洲AV无码不卡在线观看下载 | 怡红院亚洲红怡院在线观看| 亚洲精品国产va在线观看蜜芽| 日本高清高色视频免费| 亚洲综合激情五月色一区| 中文字幕无码精品亚洲资源网| 国产精品亚洲色图| 久久久久亚洲Av片无码v| 色婷婷7777免费视频在线观看|