校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 玩轉(zhuǎn)-SQL2005數(shù)據(jù)庫行列轉(zhuǎn)換

玩轉(zhuǎn)-SQL2005數(shù)據(jù)庫行列轉(zhuǎn)換

熱門標簽:電銷機器人虛擬號碼 海南自動外呼系統(tǒng)價格 滄州營銷外呼系統(tǒng)軟件 九鹿林外呼系統(tǒng)怎么收費 松原導航地圖標注 沈陽智能外呼系統(tǒng)代理 舞鋼市地圖標注app 創(chuàng)業(yè)電銷機器人 浙江地圖標注

注意:列轉(zhuǎn)行的方法可能是我獨創(chuàng)的了,呵呵,因為在網(wǎng)上找不到哦,全部是我自己寫的,用到了系統(tǒng)的SysColumns

(一)行轉(zhuǎn)列的方法

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

實現(xiàn)目的

 

1:建立測試用的數(shù)據(jù)庫

復制代碼 代碼如下:

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

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

復制代碼 代碼如下:

insert into RowTest values ('張三','語文','91')
insert into RowTest values ('張三','數(shù)學','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 ('李四','數(shù)學','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 ('小生','數(shù)學','72')
insert into RowTest values ('小生','英語','73')
insert into RowTest values ('小生','生物','74')
insert into RowTest values ('小生','物理','75')
insert into RowTest values ('小生','化學','76')

3:設(shè)計想法

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

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)加入數(shù)據(jù)

復制代碼 代碼如下:

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

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

(2)加入數(shù)據(jù)

復制代碼 代碼如下:

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

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

至此,數(shù)據(jù)行轉(zhuǎn)列ok

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

實現(xiàn)目的

1:實現(xiàn)原理

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

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

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

2:建立表格

復制代碼 代碼如下:

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

)

3:加入數(shù)據(jù)
復制代碼 代碼如下:

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

4:經(jīng)典的地方來了
復制代碼 代碼如下:

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

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

Col的name 直接取得分數(shù)

您可能感興趣的文章:
  • 一個簡單的SQL 行列轉(zhuǎn)換語句
  • sqlserver2005 行列轉(zhuǎn)換實現(xiàn)方法
  • C#中DataTable實現(xiàn)行列轉(zhuǎn)換的方法
  • 淺析SQL語句行列轉(zhuǎn)換的兩種方法 case...when與pivot函數(shù)的應用
  • sql 普通行列轉(zhuǎn)換
  • 深入SQL中PIVOT 行列轉(zhuǎn)換詳解
  • Sql實現(xiàn)行列轉(zhuǎn)換方便了我們存儲數(shù)據(jù)和呈現(xiàn)數(shù)據(jù)
  • Oracle實現(xiàn)行列轉(zhuǎn)換的方法分析
  • JS控制網(wǎng)頁動態(tài)生成任意行列數(shù)表格的方法
  • 數(shù)據(jù)庫實現(xiàn)行列轉(zhuǎn)換(mysql示例)

標簽:日喀則 海口 西藏 咸寧 臺灣 公主嶺 寶雞 商洛

巨人網(wǎng)絡(luò)通訊聲明:本文標題《玩轉(zhuǎn)-SQL2005數(shù)據(jù)庫行列轉(zhuǎn)換》,本文關(guān)鍵詞  玩轉(zhuǎn),-SQL2005,數(shù)據(jù)庫,行列,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《玩轉(zhuǎn)-SQL2005數(shù)據(jù)庫行列轉(zhuǎn)換》相關(guān)的同類信息!
  • 本頁收集關(guān)于玩轉(zhuǎn)-SQL2005數(shù)據(jù)庫行列轉(zhuǎn)換的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 安仁县| 大荔县| 黔南| 新乐市| 桃园市| 枞阳县| 莆田市| 英德市| 衡南县| 芦山县| 瑞金市| 阿巴嘎旗| 两当县| 南木林县| 盐边县| 梁山县| 丰城市| 双牌县| 内丘县| 绥芬河市| 吉隆县| 肇州县| 黑水县| 剑河县| 武宁县| 泗洪县| 鹿泉市| 海丰县| 潞城市| 吐鲁番市| 宣城市| 平罗县| 阳江市| 乌恰县| 邓州市| 格尔木市| 乌拉特后旗| 清水河县| 奉节县| 竹山县| 喀什市|