欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

sqlserver橫表轉(zhuǎn),行轉(zhuǎn)列 sqlserver

MS SqlServer 2000 行轉(zhuǎn)列 的問題

/*

創(chuàng)新互聯(lián)專業(yè)提供成都主機(jī)托管四川主機(jī)托管成都服務(wù)器托管四川服務(wù)器托管,支持按月付款!我們的承諾:貴族品質(zhì)、平民價(jià)格,機(jī)房位于中國(guó)電信/網(wǎng)通/移動(dòng)機(jī)房,西信服務(wù)器托管服務(wù)有保障!

sql server 2005的有關(guān)寫法。

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

姓名 課程 分?jǐn)?shù)

張三 語文 74

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

張三 物理 93

李四 語文 74

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

李四 物理 94

想變成(得到如下結(jié)果):

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

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

李四 74 84 94

張三 74 83 93

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

*/

create table tb(姓名 varchar(10) , 課程 varchar(10) , 分?jǐn)?shù) int)

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

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

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

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

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

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

go

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

select 姓名 as 姓名 ,

max(case 課程 when '語文' then 分?jǐn)?shù) else 0 end) 語文,

max(case 課程 when '數(shù)學(xué)' then 分?jǐn)?shù) else 0 end) 數(shù)學(xué),

max(case 課程 when '物理' then 分?jǐn)?shù) else 0 end) 物理

from tb

group by 姓名

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

declare @sql varchar(8000)

set @sql = 'select 姓名 '

select @sql = @sql + ' , max(case 課程 when ''' + 課程 + ''' then 分?jǐn)?shù) else 0 end) [' + 課程 + ']'

from (select distinct 課程 from tb) as a

set @sql = @sql + ' from tb group by 姓名'

exec(@sql)

--SQL SERVER 2005 靜態(tài)SQL。

select * from (select * from tb) a pivot (max(分?jǐn)?shù)) for 課程 in (語文,數(shù)學(xué),物理)) b

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

declare @sql varchar(8000)

select @sql = isnull(@sql + ',' , '') + 課程 from tb group by 課程

exec ('select * from (select * from tb) a pivot (max(分?jǐn)?shù)) for 課程 in (' + @sql + ')) b')

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

/*

問題:在上述結(jié)果的基礎(chǔ)上加平均分,總分,得到如下結(jié)果:

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

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

李四 74 84 94 84.00 252

張三 74 83 93 83.33 250

*/

--SQL SERVER 2000 靜態(tài)SQL。

select 姓名 姓名,

max(case 課程 when '語文' then 分?jǐn)?shù) else 0 end) 語文,

max(case 課程 when '數(shù)學(xué)' then 分?jǐn)?shù) else 0 end) 數(shù)學(xué),

max(case 課程 when '物理' then 分?jǐn)?shù) else 0 end) 物理,

cast(avg(分?jǐn)?shù)*1.0) as decimal(18,2)) 平均分,

sum(分?jǐn)?shù)) 總分

from tb

group by 姓名

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

declare @sql varchar(8000)

set @sql = 'select 姓名 '

select @sql = @sql + ' , max(case 課程 when ''' + 課程 + ''' then 分?jǐn)?shù) else 0 end) [' + 課程 + ']'

from (select distinct 課程 from tb) as a

set @sql = @sql + ' , cast(avg(分?jǐn)?shù)*1.0) as decimal(18,2)) 平均分 , sum(分?jǐn)?shù)) 總分 from tb group by 姓名'

exec(@sql)

--SQL SERVER 2005 靜態(tài)SQL。

select m.* , n.平均分 , n.總分 from

(select * from (select * from tb) a pivot (max(分?jǐn)?shù)) for 課程 in (語文,數(shù)學(xué),物理)) b) m,

(select 姓名 , cast(avg(分?jǐn)?shù)*1.0) as decimal(18,2)) 平均分 , sum(分?jǐn)?shù)) 總分 from tb group by 姓名) n

where m.姓名 = n.姓名

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

declare @sql varchar(8000)

select @sql = isnull(@sql + ',' , '') + 課程 from tb group by 課程

exec ('select m.* , n.平均分 , n.總分 from

(select * from (select * from tb) a pivot (max(分?jǐn)?shù)) for 課程 in (' + @sql + ')) b) m ,

(select 姓名 , cast(avg(分?jǐn)?shù)*1.0) as decimal(18,2)) 平均分 , sum(分?jǐn)?shù)) 總分 from tb group by 姓名) n

where m.姓名 = n.姓名')

drop table tb

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

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

/*

問題:如果上述兩表互相換一下:即表結(jié)構(gòu)和數(shù)據(jù)為:

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

張三 748393

李四 748494

想變成(得到如下結(jié)果):

姓名 課程 分?jǐn)?shù)

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

李四 語文 74

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

李四 物理 94

張三 語文 74

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

張三 物理 93

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

*/

create table tb(姓名 varchar(10) , 語文 int , 數(shù)學(xué) int , 物理 int)

insert into tb values('張三',74,83,93)

insert into tb values('李四',74,84,94)

go

--SQL SERVER 2000 靜態(tài)SQL。

select * from

(

select 姓名 , 課程 = '語文' , 分?jǐn)?shù) = 語文 from tb

union all

select 姓名 , 課程 = '數(shù)學(xué)' , 分?jǐn)?shù) = 數(shù)學(xué) from tb

union all

select 姓名 , 課程 = '物理' , 分?jǐn)?shù) = 物理 from tb

) t

order by 姓名 , case 課程 when '語文' then 1 when '數(shù)學(xué)' then 2 when '物理' then 3 end

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

--調(diào)用系統(tǒng)表動(dòng)態(tài)生態(tài)。

declare @sql varchar(8000)

select @sql = isnull(@sql + ' union all ' , '' ) + ' select 姓名 , [課程] = ' + quotename(Name , '''') + ' , [分?jǐn)?shù)] = ' + quotename(Name) + ' from tb'

from syscolumns

where name! = N'姓名' and ID = object_id('tb') --表名tb,不包含列名為姓名的其它列

order by colid asc

exec(@sql + ' order by 姓名 ')

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

select 姓名 , 課程 , 分?jǐn)?shù) from tb unpivot (分?jǐn)?shù) for 課程 in([語文] , [數(shù)學(xué)] , [物理])) t

--SQL SERVER 2005 動(dòng)態(tài)SQL,同SQL SERVER 2000 動(dòng)態(tài)SQL。

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

/*

問題:在上述的結(jié)果上加個(gè)平均分,總分,得到如下結(jié)果:

姓名 課程 分?jǐn)?shù)

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

李四 語文 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 姓名 , 課程 = '語文' , 分?jǐn)?shù) = 語文 from tb

union all

select 姓名 as 姓名 , 課程 = '數(shù)學(xué)' , 分?jǐn)?shù) = 數(shù)學(xué) from tb

union all

select 姓名 as 姓名 , 課程 = '物理' , 分?jǐn)?shù) = 物理 from tb

union all

select 姓名 as 姓名 , 課程 = '平均分' , 分?jǐn)?shù) = cast((語文 + 數(shù)學(xué) + 物理)*1.0/3 as decimal(18,2)) from tb

union all

select 姓名 as 姓名 , 課程 = '總分' , 分?jǐn)?shù) = 語文 + 數(shù)學(xué) + 物理 from tb

) t

order by 姓名 , case 課程 when '語文' then 1 when '數(shù)學(xué)' then 2 when '物理' then 3 when '平均分' then 4 when '總分' then 5 end

drop table tb

-- 測(cè)試數(shù)據(jù): #T

if object_id('tempdb.dbo.#T') is not null drop table #T

create table #T (項(xiàng)目 nvarchar(5),值 int,位置 int)

insert into #T

select '項(xiàng)目1',15,1 union all

select '項(xiàng)目1',34,2 union all

select '項(xiàng)目1',56,3 union all

select '項(xiàng)目1',42,4 union all

select '項(xiàng)目2',56,1 union all

select '項(xiàng)目2',67,2 union all

select '項(xiàng)目2',31,3 union all

select '項(xiàng)目2',89,4 union all

select '項(xiàng)目3',45,1 union all

select '項(xiàng)目3',22,2 union all

select '項(xiàng)目3',8,3 union all

select '項(xiàng)目3',23,4

declare @sql varchar(8000)

set @sql=''

select @sql=@sql+',max(case when 項(xiàng)目='''+項(xiàng)目+''' then 值 end) ['+項(xiàng)目+']'

from #T group by 項(xiàng)目

set @sql=stuff(@sql,1,1,'')

exec ('select '+@sql+',位置 from #T group by 位置')

/*

項(xiàng)目1 項(xiàng)目2 項(xiàng)目3 位置

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

15 56 45 1

34 67 22 2

56 31 8 3

42 89 23 4

*/

/*

-- Author:Flystone

-- Version:V1.001 Date:2008-05-15 初稿

-- Version:V1.002 Date:2008-05-16 1、 處理空格帶來的異常

-- 2、 增加了形如yyyy-mm-dd hh:mm:ss

-- yyyy-m-d h:m:s 格式的處理

*/

-- Test Data: ta

If object_id('ta') is not null

Drop table ta

Go

Create table ta(xm varchar(10),v int,pos int)

Go

Insert into ta

select '項(xiàng)目1',15,1 union all

select '項(xiàng)目1',34,2 union all

select '項(xiàng)目1',56,3 union all

select '項(xiàng)目1',42,4 union all

select '項(xiàng)目2',56,1 union all

select '項(xiàng)目2',67,2 union all

select '項(xiàng)目2',31,3 union all

select '項(xiàng)目2',89,4 union all

select '項(xiàng)目3',45,1 union all

select '項(xiàng)目3',22,2 union all

select '項(xiàng)目3',8,3 union all

select '項(xiàng)目3',23,4

Go

--Start

declare @s varchar(1000)

select @s = isnull(@s +',','')+ '['+xm+']= max(case when xm = '''+xm+''' then v else 0 end)'

from (select distinct xm from ta) a

exec('select '+@s + ',pos from ta group by pos')

--Result:

/*

項(xiàng)目1 項(xiàng)目2 項(xiàng)目3 pos

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

15 56 45 1

34 67 22 2

56 31 8 3

42 89 23 4

*/

--End

-- -- (Roy)生成測(cè)試數(shù)據(jù)

set nocount on;

if not object_id('Tempdb..#T') is null

drop table #T

Go

set nocount on;

Create table #T([項(xiàng)目] nvarchar(3),[值] int,[位置] int)

Insert #T

select N'項(xiàng)目1',15,1 union all

select N'項(xiàng)目1',34,2 union all

select N'項(xiàng)目1',56,3 union all

select N'項(xiàng)目1',42,4 union all

select N'項(xiàng)目2',56,1 union all

select N'項(xiàng)目2',67,2 union all

select N'項(xiàng)目2',31,3 union all

select N'項(xiàng)目2',89,4 union all

select N'項(xiàng)目3',45,1 union all

select N'項(xiàng)目3',22,2 union all

select N'項(xiàng)目3',8,3 union all

select N'項(xiàng)目3',23,4

Go

declare @s nvarchar(1000)

select @s=isnull(@s+',','')+quotename([項(xiàng)目]) from #T group by [項(xiàng)目]

exec('select '+@s+',[位置] from #T pivot (max([值]) for [項(xiàng)目] in('+@s+'))b')

--Result:

/*

項(xiàng)目1 項(xiàng)目2 項(xiàng)目3 位置

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

15 56 45 1

34 67 22 2

56 31 8 3

42 89 23 4

*/

--End

請(qǐng)問Sql server如何把一個(gè)內(nèi)連接的輸出的表格橫向顯示

普通sql很難做,要用sqlserver存儲(chǔ)過程,用游標(biāo)循環(huán)shorename的表,然后用case when一個(gè)一個(gè)拼起來

比如游標(biāo)里寫

create table aa as select osid,osuser,ostime,sum(case when shopname=@shopname and then osnumber else 0 end) as @shopname

from aa, shopname where aa.osid=shopname.osid

這樣表aa在循環(huán)中每次都加上一個(gè)新shopname字段,直到游標(biāo)shopname循環(huán)完畢,思路就是這樣,最后再寫個(gè)delete語句,把a(bǔ)a表里osnumber=0刪掉就可以了,因?yàn)樗际潜磉B接時(shí)由于shopname不匹配產(chǎn)生的垃圾數(shù)據(jù)

sqlserver不同數(shù)據(jù)庫(kù)間如何轉(zhuǎn)移表、數(shù)據(jù)

用查詢分析器在A庫(kù)上執(zhí)行

1.復(fù)制表:select * into b..tableA from tableA where 1 = 2

2復(fù)制表數(shù)據(jù):insert into b..tableA select * from tableA

如果B中沒有表TABLEA,直接復(fù)制表加數(shù)據(jù)select * into b..tableA from tableA

sqlserver 如何將豎列轉(zhuǎn)化為橫向

select groupfield1, groupfield2, max(case when type=1 then value end) col1,

max(case when type=2 then value end) col2

from table

group by groupfield1, groupdfield2

sqlserver用編程語句怎么把兩個(gè)表格橫向合成一個(gè)

在第一個(gè)表里面增加字段alter table a add b varchar(20)

然后把第二個(gè)表中內(nèi)容插入就可以了 insert into table a (字段,字段,字段) select 字段,字段,字段 from table b

當(dāng)前文章:sqlserver橫表轉(zhuǎn),行轉(zhuǎn)列 sqlserver
文章地址:http://chinadenli.net/article36/dsgsesg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)域名注冊(cè)網(wǎng)站設(shè)計(jì)營(yíng)銷型網(wǎng)站建設(shè)商城網(wǎng)站電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司