亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

玩轉-SQL2005數據庫行列轉換

2024-08-31 01:01:44
字體:
來源:轉載
供稿:網友

注意:列轉行的方法可能是我獨創的了,呵呵,因為在網上找不到哦,全部是我自己寫的,用到了系統的SysColumns

(一)行轉列的方法

先說說行轉列的方法,這個就比較好想了,利用拼sql和case when解決即可

實現目的

玩轉-SQL2005數據庫行列轉換

 

1:建立測試用的數據庫

復制代碼 代碼如下:


CREATE TABLE RowTest(
    [Name] [nvarchar](10) NULL,--名稱
    [Course] [nvarchar](10) NULL,--課程名稱
    [Record] [int] NULL--課程的分數
)


2:加入測試用的數據庫(先加入整齊的數據)

復制代碼 代碼如下:


insert into RowTest values ('張三','語文','91')
insert into RowTest values ('張三','數學','92')
insert into RowTest values ('張三','英語','93')
insert into RowTest values ('張三','生物','94')
insert into RowTest values ('張三','物理','95')
insert into RowTest values ('張三','化學','96')

insert into RowTest values ('李四','語文','81')
insert into RowTest values ('李四','數學','82')
insert into RowTest values ('李四','英語','83')
insert into RowTest values ('李四','生物','84')
insert into RowTest values ('李四','物理','85')
insert into RowTest values ('李四','化學','86')

insert into RowTest values ('小生','語文','71')
insert into RowTest values ('小生','數學','72')
insert into RowTest values ('小生','英語','73')
insert into RowTest values ('小生','生物','74')
insert into RowTest values ('小生','物理','75')
insert into RowTest values ('小生','化學','76')

3:設計想法

  行轉列的原理就是把行的類別找出來當做查詢的字段,利用case when 把當前的分數加到當前的字段上去,最后用group by 把數據整合在一起

4:通用方法

復制代碼 代碼如下:


declare @sql nvarchar(max)
set @sql='select Name'
select @sql=@sql+','+'isnull(max( case when Course='''+TCourse.Course+''' then Record end ),0)'+TCourse.Course
 from (select distinct Course from RowTest)TCourse

set @sql=@sql+' from RowTest group by Name order by Name'

print @sql
exec(@sql)

說明: 把所有的課程名稱取出來作為列(查詢表TCourse)

        用case when 的方法把sql 拼出來

5:課外試驗

(1)加入數據

復制代碼 代碼如下:


insert into dbo.RowTest values ('小生','生物','110')

去除max 方法會報錯,因為一條可能對應多行數據

(2)加入數據

復制代碼 代碼如下:


insert into dbo.RowTest values ('小生','計算機','110')

數據會多出一列,但是其他人無此課程就會為0

至此,數據行轉列ok

(二)列轉行的新方法開始了

實現目的

玩轉-SQL2005數據庫行列轉換

1:實現原理

在網上看了別人的做法,基本都是用union all 來一個個轉換的,我覺得不太好用。

首先我想到了要把所有的列名取出來,就在網上查了下獲取表的所有列名

 然后我可以把主表和列名形成的表串起來,這樣就可以形成需要的列數,然后根據判斷取值就完成了了,呵呵

2:建立表格

復制代碼 代碼如下:


create table CoulumTest
(
 Name nvarchar(10),
 語文  int,
 數學 int,
 英語 int

)


3:加入數據

復制代碼 代碼如下:


insert into CoulumTest values(N'張三',90,91,92)
insert into CoulumTest values(N'李四',80,81,82)


4:經典的地方來了

復制代碼 代碼如下:


select CT.Name,Col.name 課程,
(case when Col.name=N'語文' then CT.語文  when Col.name=N'數學' then CT.數學
 when Col.name=N'英語' then CT.英語 end ) as 分數 from CoulumTest CT
left join (select name from SysColumns  Where id=Object_Id('CoulumTest')) Col on Col.name<>'Name'


你沒看錯,一句話搞定,但是有個問題迷惑了我,我覺得還不夠簡化,如果可以把case when 都不用了就更好了,請大神們指點小弟一下了。怎么根據

Col的name 直接取得分數

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一网站免费视频| 91九色视频在线| 亚洲欧美日韩天堂一区二区| 国产精品永久免费视频| 欧美性猛交xxxx偷拍洗澡| 国产亚洲视频中文字幕视频| 欧美亚洲在线观看| 欧美在线www| 久久最新资源网| 夜色77av精品影院| 亚洲淫片在线视频| 国产97在线亚洲| 欧美在线精品免播放器视频| 亚洲国产高清福利视频| 奇米影视亚洲狠狠色| 国产精品黄页免费高清在线观看| 亚洲精品久久久久久久久久久| 欧美亚洲在线视频| 久久深夜福利免费观看| 亚洲性夜色噜噜噜7777| 国产精品久久久av久久久| 久久久成人av| 亚洲一区二区三区sesese| 亚洲精品免费一区二区三区| 91精品国产高清自在线| 欧美亚洲成人免费| 色综合久综合久久综合久鬼88| 欧美高清在线播放| 精品亚洲国产视频| 亚洲激情小视频| 亚洲精品一区二区在线| 国语自产偷拍精品视频偷| 欧美亚洲日本网站| 欧美日韩免费网站| 国产97人人超碰caoprom| 97在线视频免费播放| 国产精品视频久久久| 久久精品国产亚洲| 国产亚洲精品久久久久久牛牛| 91久久久久久久久久久| xvideos亚洲| 成人妇女免费播放久久久| 亚洲国产精久久久久久久| 麻豆国产va免费精品高清在线| 午夜精品久久久久久久久久久久| 亚洲欧洲日产国产网站| 亚洲激情在线视频| 精品一区二区三区四区| 日韩av免费看网站| 国产精品吊钟奶在线| 日韩中文字幕精品| 中文字幕精品国产| 亚洲成人久久电影| 奇门遁甲1982国语版免费观看高清| 国产在线播放91| 亚洲成人动漫在线播放| 午夜伦理精品一区| 欧美成人精品h版在线观看| 4438全国成人免费| 精品一区二区三区三区| 久久精品一本久久99精品| 国产成人97精品免费看片| 国产一区二区三区在线播放免费观看| 久久97精品久久久久久久不卡| 自拍偷拍亚洲欧美| xxav国产精品美女主播| 久久精品国产一区二区电影| 国产精品亚洲美女av网站| 色播久久人人爽人人爽人人片视av| 国产精品美女久久久久久免费| 日日骚av一区| 亚洲电影免费观看高清完整版在线| 精品日韩美女的视频高清| 国产精品日韩欧美综合| 91久久精品国产91久久| 最近2019年日本中文免费字幕| 亚洲网站在线看| 国产午夜精品久久久| 精品久久久久久亚洲精品| 久久精品视频导航| 在线视频国产日韩| 成人av色在线观看| 久久中国妇女中文字幕| 亚洲精品乱码久久久久久金桔影视| 国产精品精品视频一区二区三区| 亚洲欧洲国产精品| 日韩色av导航| 久久国产精品久久久久| 国产精品久久久久久影视| 国产成人精品日本亚洲| 国产精品一区二区久久久| 欧美专区在线观看| 91wwwcom在线观看| 成人免费观看49www在线观看| 亚洲欧美日韩一区二区三区在线| 91精品国产高清自在线看超| 亚洲精品aⅴ中文字幕乱码| 国产精品久久久久7777婷婷| 日本成人黄色片| 欧美国产第二页| 红桃视频成人在线观看| 97精品伊人久久久大香线蕉| 日韩电影免费观看在线| 国产情人节一区| 国产精品久久久久久婷婷天堂| 国内精品中文字幕| 久久久亚洲国产天美传媒修理工| 欧美性受xxxx白人性爽| 亚洲国产精品va| 国产69精品久久久久久| 久久成人18免费网站| 欧美精品在线免费观看| 91国产视频在线| www.久久久久久.com| 欧美精品一本久久男人的天堂| 亚洲综合中文字幕在线观看| 亚洲免费成人av电影| 欧美激情xxxx| 国产成人精彩在线视频九色| 97久久精品人人澡人人爽缅北| 欧美一级电影免费在线观看| 久久夜色精品国产| 中文字幕av一区中文字幕天堂| 久久久久女教师免费一区| 国产精品麻豆va在线播放| 黑人巨大精品欧美一区免费视频| 亚洲v日韩v综合v精品v| 日本韩国欧美精品大片卡二| 91av在线播放视频| 日韩av男人的天堂| 国产日韩欧美日韩大片| 91久久精品久久国产性色也91| 中国china体内裑精亚洲片| 亚洲欧美日韩天堂一区二区| 欧美激情性做爰免费视频| 国产精品视频午夜| 欧美性猛交丰臀xxxxx网站| 欧美激情精品久久久久久变态| 97视频在线观看亚洲| 久久久91精品| 在线播放精品一区二区三区| 亚洲字幕一区二区| 最新国产精品拍自在线播放| 亚洲综合小说区| 亚洲欧美日韩高清| 欧美最猛性xxxx| 欧美午夜精品久久久久久人妖| 成人精品久久一区二区三区| 国产视频欧美视频| 亚洲欧美激情四射在线日| 欧美日本国产在线| 中文字幕欧美精品日韩中文字幕| 91青草视频久久| 爱福利视频一区| 97在线视频观看| 欧美在线一区二区视频| 欧美激情区在线播放| 91精品在线观| 亚洲天堂视频在线观看| 国产日韩欧美在线视频观看| 亚洲欧美999| 欧美激情中文网| 亚洲网址你懂得| 亚洲韩国日本中文字幕|