国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - Sql Server - table 行轉(zhuǎn)列的sql詳解

table 行轉(zhuǎn)列的sql詳解

2019-11-08 15:31mssql教程網(wǎng) Sql Server

tabele行轉(zhuǎn)列的資料,網(wǎng)上搜一下很多。大家照著網(wǎng)上copy就可以實(shí)現(xiàn)自己想要的功能。但是大家在實(shí)現(xiàn)功能后是否想過行轉(zhuǎn)列為什么要這樣寫?下面就以一個(gè)實(shí)例來分析, 希望對初學(xué)者有所幫助。

一、要求

1 創(chuàng)建數(shù)據(jù)表

CREATE TABLE [dbo].[StuScore](

[stuid] [int] NOT NULL,

[subject] [nvarchar](30) NULL,

[score] [decimal](5, 1) NULL

)

2 插入測試數(shù)據(jù)

stuid subject score

3 chinese 76.0

3 math 73.0

4 chinese 82.0

5 chinese 66.0

5 math 93.0

6 chinese 67.0

7 math 83.0

8 chinese 77.0

8 math 84.0

3 行轉(zhuǎn)列后的結(jié)果

stuid chinese math

3 76.0 73.0

4 82.0 0.0

5 66.0 93.0

6 67.0 0.0

7 0.0 83.0

8 77.0 84.0

二 、分析

1 行轉(zhuǎn)列,一個(gè)重點(diǎn)就是怎么樣知道有多少列,怎么樣創(chuàng)建這些列?我們可以先把這個(gè)問題擱置,而假設(shè)這些列是已知的。 例如示例數(shù)據(jù)中,可以先假設(shè)subject的數(shù)據(jù)[chinese,math]是已知的,這樣問題就簡化了許多

2 當(dāng)已知了chinese,math后,我們至少要先得到轉(zhuǎn)換后的tabel結(jié)構(gòu)

如下;

select stuid, 0 as chinese, 0 as math from dbo.StuScore

結(jié)果如下

stuid chinese math

3 0 0

3 0 0

4 0 0

5 0 0

5 0 0

6 0 0

7 0 0

8 0 0

8 0 0

3 接著就需要往這個(gè)數(shù)據(jù)集中去填充chinese, math的數(shù)據(jù)

select stuid,

case subject when 'chinese' then score else 0 end as chinese,

case subject when 'math' then score else 0 end as math

from dbo.StuScore

結(jié)果如下:

stuid chinese math

3 76.0 0.0

3 0.0 73.0

4 82.0 0.0

5 66.0 0.0

5 0.0 93.0

6 67.0 0.0

7 0.0 83.0

8 77.0 0.0

8 0.0 84.0

4 細(xì)心的讀者會(huì)發(fā)現(xiàn)步驟3中的結(jié)果與我們想要的已經(jīng)非常接近了,只需再做一個(gè)sum()處理,就OK了

select stuid,

sum(case subject when 'chinese' then score else 0 end ) as chinese,

sum(case subject when 'math' then score else 0 end ) as math

from dbo.StuScore group by stuid

得到的正是我們想要的結(jié)果

stuid chinese math

3 76.0 73.0

4 82.0 0.0

5 66.0 93.0

6 67.0 0.0

7 0.0 83.0

8 77.0 84.0

是不是現(xiàn)在就已經(jīng)完成了呢?答案是否定的。前面我們已經(jīng)說過,是為了簡化問題,在假設(shè)已經(jīng)知道了subject數(shù)據(jù)的情況下,這么處理的,實(shí)際上subject的數(shù)據(jù)是可變的,未知的,接下來就是要解決這個(gè)問題了

5 要獲取subject的數(shù)據(jù)其實(shí)很簡單

select distinct subject from dbo.StuScore

獲取以后怎樣得到case subject when 'chinese' then score else 0 end 這種語句?

可以根據(jù)subject的值去動(dòng)態(tài)的組sql語句

看下面的一段代碼

declare @sql varchar(2000)

set @sql=''

select @sql =@sql+ ',case subject when '''+subject+''' then 1 else 0 end as ' + subject

from (select distinct subject from dbo.StuScore) as sub

print @sql

message打印的信息如下:

,case subject when 'chinese' then 1 else 0 end as chinese,case subject when 'math' then 1 else 0 end as math

6 最后我們就需要將前面步驟綜合起來,得到最終的sql

declare @sql varchar(2000)

set @sql='select stuid'

select @sql =@sql+ ',sum(case subject when '''+subject+''' then score else 0 end) as ' + subject

from (select distinct subject from dbo.StuScore) as sub

set @sql=@sql + ' from dbo.StuScore group by stuid'

exec(@sql)

stuid chinese math

3 76.0 73.0

4 82.0 0.0

5 66.0 93.0

6 67.0 0.0

7 0.0 83.0

8 77.0 84.0

至此,整個(gè)分析過程和結(jié)果就都出來了。

初試寫文章, 多包涵,指正。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久久久高清视频 | 成人综合电影网 | 国产a视频| 亚洲天堂影院 | 久久久久久国产 | 毛片一级在线 | 欧美精品成人一区二区在线 | 国产成人高清 | 免费看的毛片 | 久久国产欧美日韩精品 | 一级片在线观看 | 国产精品美女久久久av超清 | 中文字幕成人网 | 国产精品99久久久久久久女警 | 在线日韩成人 | 黄色毛片在线观看 | 欧美在线免费观看 | 久久综合九色综合欧美狠狠 | 国产精品久久久久久中文字 | av网站在线播放 | 亚洲一区久久 | 日本中文字幕在线观看 | 国产最新视频 | 91在线视频导航 | 黄在线免费观看 | 一区二区三区在线看 | 在线欧美一区 | 日韩视频在线一区二区 | 日韩城人网站 | 精品国产欧美一区二区三区成人 | 久久国产精品久久久久久电车 | 日韩国产一区二区三区 | 涩涩涩久久久成人精品 | 中国一级特黄毛片大片 | 久久久久国产精品 | 欧美黄色网页 | 久久国产精品视频 | аⅴ资源新版在线天堂 | 日韩乱视频 | 在线观看国产一区视频 | 国产日韩精品一区 |