最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

sqlserver 行列互轉(zhuǎn)實現(xiàn)小結(jié)

 更新時間:2010年04月12日 01:48:33   作者:  
列轉(zhuǎn)行比較經(jīng)典,需要的朋友可以參考下。
復(fù)制代碼 代碼如下:

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

整理人:中國風(fēng)(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ù)學(xué)',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ù)學(xué)',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ù)學(xué)]=max(case when [Course]='數(shù)學(xué)' 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ù)學(xué)],[物理],[英語],[語文]))b

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

(2 行受影響)
*/

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

--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]')--加多一列(學(xué)科平均分用avg([Score]))

生成動態(tài):

select
[Student],
[數(shù)學(xué)]=max(case when [Course]='數(shù)學(xué)' 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]) --加多一列(學(xué)科平均分用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ù)學(xué)],[物理],[英語],[語文],[總成績]
from
(select *,[總成績]=sum([Score])over(partition by [Student]) from Class) a --平均分時用avg([Score])
pivot
(max([Score]) for [Course] in([數(shù)學(xué)],[物理],[英語],[語文]))b

生成格式:

/*
Student 數(shù)學(xué) 物理 英語 語文 總成績
------- ----------- ----------- ----------- ----------- -----------
李四 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ù)學(xué)] 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ù)學(xué)',[Score]=[數(shù)學(xué)] 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ù)學(xué)],[物理],[英語],[語文]))b

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

(8 行受影響)
*/

相關(guān)文章

最新評論

黄浦区| 乌兰县| 肇庆市| 松阳县| 维西| 台南市| 阳新县| 吉安市| 泸定县| 长兴县| 当阳市| 铜山县| 诸暨市| 西乌| 永善县| 屏边| 谷城县| 寿光市| 麟游县| 颍上县| 阜城县| 麻栗坡县| 武隆县| 辽阳县| 长葛市| 广平县| 义马市| 襄垣县| 玉山县| 桓仁| 利川市| 亚东县| 金乡县| 津南区| 常州市| 平阴县| 武定县| 曲周县| 柳河县| 峨眉山市| 乌兰县|