SQL基礎教程之行轉列Pivot函數_數據庫其它

來源:腳本之家  責任編輯:小易  

http://www.w3school.com.cn/sql/index.asp這里面的教程應該說,算是最基礎的,自己翻翻,很多的內容www.13333515.buzz防采集請勿采集本網。

前言

未來的一個月時間中,會總結一系列SQL知識點,一次只總結一個知識點,盡量說明白,下面來說說SQL 中常用Pivot 函數(這里是用的數據庫是SQLSERVER,與其他數據庫是類似的,大家放心看就好)

http://www.xfbbs.com/CodeShow/28/Software_6079.html http://www.verycd.com/topics/57507/ http://www.verycd.com/topics/155116/

讓我們先從一個虛構的場景中來著手吧

數據庫技術是程序開發人員必須掌握的技術,網頁學習網SQL Server基礎教程以SQL Server 2005為主要開發工具來介紹SQL Server數據庫的基本操作、數據庫設計、數據庫高級查詢等。詳細教程可以看:

萬國來朝,很多供應商每天都匯報各自的收入情況。先來創建一個DailyIncome 表

網頁版本的 www.w3school.com.cn www.w3school.com www.w3school.cn www.w3school.net 如果還不行就再問我,或者直接加我msn [email protected] 或者qq 我給你 里邊有最基礎的 sql使用

create table DailyIncome(VendorId nvarchar(10), IncomeDay nvarchar(10), IncomeAmount int)--VendorId 供應商ID,--IncomeDay 收入時間--IncomeAmount 收入金額

sys.database是SQL Server數據庫的系統表,里面存放的是系統中的全部數據庫對象的信息,比如,有哪些數據庫,主鍵,約束之類的。USE master GO 判斷是否存在archive數據庫 IF EXISTS(SELECT*FROM

緊接著來插入數據看看

第一,表中應該有個編號字段 利用編號刪除 delete from 表 where id in(1,2)(刪除表的這兩行) update 表 set 字段='' where id in(1,2)(刪除表的字段內容) 第二,如果這兩行數據和別的某一行

(留意看下,有的供應商某天中會有多次收入,應該是分批進賬的)

insert into DailyIncome values ('SPIKE', 'FRI', 100)insert into DailyIncome values ('SPIKE', 'MON', 300)insert into DailyIncome values ('FREDS', 'SUN', 400)insert into DailyIncome values ('SPIKE', 'WED', 500)insert into DailyIncome values ('SPIKE', 'TUE', 200)insert into DailyIncome values ('JOHNS', 'WED', 900)insert into DailyIncome values ('SPIKE', 'FRI', 100)insert into DailyIncome values ('JOHNS', 'MON', 300)insert into DailyIncome values ('SPIKE', 'SUN', 400)insert into DailyIncome values ('JOHNS', 'FRI', 300)insert into DailyIncome values ('FREDS', 'TUE', 500)insert into DailyIncome values ('FREDS', 'TUE', 200)insert into DailyIncome values ('SPIKE', 'MON', 900)insert into DailyIncome values ('FREDS', 'FRI', 900)insert into DailyIncome values ('FREDS', 'MON', 500)insert into DailyIncome values ('JOHNS', 'SUN', 600)insert into DailyIncome values ('SPIKE', 'FRI', 300)insert into DailyIncome values ('SPIKE', 'WED', 500)insert into DailyIncome values ('SPIKE', 'FRI', 300)insert into DailyIncome values ('JOHNS', 'THU', 800)insert into DailyIncome values ('JOHNS', 'SAT', 800)insert into DailyIncome values ('SPIKE', 'TUE', 100)insert into DailyIncome values ('SPIKE', 'THU', 300)insert into DailyIncome values ('FREDS', 'WED', 500)insert into DailyIncome values ('SPIKE', 'SAT', 100)insert into DailyIncome values ('FREDS', 'SAT', 500)insert into DailyIncome values ('FREDS', 'THU', 800)insert into DailyIncome values ('JOHNS', 'TUE', 600)

讓我們先來看看前十行數據:

select top 10 * from DailyIncome

如圖所示:

DailyIncome

雖然數據是能夠完全給展示了,但好像一眼望去不能得到對我們用處更大的信息,比如說我們想得到每個供應商的每天的總收入,這時我們應該做一些數據形式的轉變了,平常的所用的是這樣的。

select VendorId ,sum(case when IncomeDay='MoN' then IncomeAmount else 0 end) MON,sum(case when IncomeDay='TUE' then IncomeAmount else 0 end) TUE,sum(case when IncomeDay='WED' then IncomeAmount else 0 end) WED,sum(case when IncomeDay='THU' then IncomeAmount else 0 end) THU,sum(case when IncomeDay='FRI' then IncomeAmount else 0 end) FRI,sum(case when IncomeDay='SAT' then IncomeAmount else 0 end) SAT,sum(case when IncomeDay='SUN' then IncomeAmount else 0 end) SUNfrom DailyIncome group by VendorId

得到如下的結果:

case when結果

如果大家仔細看結果的話,會有這樣的發現,這是把VendorID進行了分組,并且對于每組中IncomeDay這一列中的值都變成了新的列名字,然后對IncomeAmount進行求和操作。

這樣寫可能是有些麻煩,別著急,我們用Pivot函數進行行轉列試下。

select * from DailyIncome ----第一步pivot (sum (IncomeAmount) ----第三步for IncomeDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN]) ---第二步) as AvgIncomePerDay

來解釋下,要想用好Pivot函數,應該理解代碼注釋中的這幾步。

第一步:肯定是要明白數據源了,這里是DailyIncome

第二步:要明白要想讓哪一列的值做新的列名字

第三步:要明白對于這新的列要求那些值呢?

下面有個練習題目,做之前不要看答案啊

問:對于SPIKE這家供應商來說,每天最大的入賬金額。

select * from DailyIncomepivot (max (IncomeAmount) for IncomeDay in ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN])) as MaxIncomePerDaywhere VendorId in ('SPIKE')

參考鏈接如下:

1.Pivot tables in SQL Server. A simple sample

2.行轉列:SQL SERVER PIVOT與用法解釋

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對真格學網的支持。

不好我是絕對不會推薦你的.你來我空間我這兩天整理了一個教程.!進去看日志里面有!http://user.qzone.qq.com/392052039/blog/1234613536放心吧你不會后悔的!內容來自www.13333515.buzz請勿采集。


  • 本文相關:
  • mysql 行轉列和列轉行實例詳解
  • sql語句實現行轉列的3種方法實例
  • sqlserver行轉列實現思路記錄
  • mysql存儲過程中使用動態行轉列
  • mssql 數據庫表行轉列,列轉行終極方案
  • sql server 2000 行轉列的實現(橫排)
  • sql查詢語句行轉列橫向顯示實例解析
  • sql動態行轉列的兩種方法
  • table 行轉列的sql詳解
  • sql行轉列和列轉行代碼詳解
  • sql四舍五入、向下取整、向上取整函數介紹
  • sql注入之手工注入示例詳解
  • 交叉表查詢sql語句
  • mybatis查詢延遲加載詳解及實例
  • 在postgresql中使用日期類型時一些需要注意的地方
  • linux下 mysql oracle 簡單使用手冊
  • 大數據時代的數據庫選擇:sql還是nosql?
  • 關于adox的相關知識
  • 為什么你不要收縮數據庫文件(國外翻譯)
  • 數據庫設計技巧[轉]
  • sql基礎教程
  • SQL新人基礎教程哪里有?
  • 各位高手,請問一下SQL基本教程,即入門教程在那里可以找得到?
  • sql入門新手教程
  • 誰有SQL數據庫的入門視頻教程啊
  • 有沒有好一點的SQL教程!
  • SQL基礎教程
  • 看sql server基礎教程時的疑問
  • sql server基礎教程
  • sql2000的入門教程哪種比較好啊
  • 網站首頁網頁制作腳本下載服務器操作系統網站運營平面設計媒體動畫電腦基礎硬件教程網絡安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess數據庫文摘數據庫其它首頁數據庫其它mysql 行轉列和列轉行實例詳解sql語句實現行轉列的3種方法實例sqlserver行轉列實現思路記錄mysql存儲過程中使用動態行轉列mssql 數據庫表行轉列,列轉行終極方案sql server 2000 行轉列的實現(橫排)sql查詢語句行轉列橫向顯示實例解析sql動態行轉列的兩種方法table 行轉列的sql詳解sql行轉列和列轉行代碼詳解sql四舍五入、向下取整、向上取整函數介紹sql注入之手工注入示例詳解交叉表查詢sql語句mybatis查詢延遲加載詳解及實例在postgresql中使用日期類型時一些需要注意的地方linux下 mysql oracle 簡單使用手冊大數據時代的數據庫選擇:sql還是nosql?關于adox的相關知識為什么你不要收縮數據庫文件(國外翻譯)數據庫設計技巧[轉]sql join on 用法mysql mysqldump命令使用詳解sqlserver、mysql、oracle三種數sql中代替like語句的另一種寫法如何讓sql運行得更快關于adox的相關知識如何取得一個表的所有字段名用逗sql server下數據庫鏈接的使用方sql server 2005的表分區sql 查詢語句積累[數據庫] 通用分頁存儲過程access轉成sql數據庫的方法mysql與oracle 差異比較之七 其它深入sql中pivot 行列轉換詳解[轉載]讓sql運行得更快sql注入詳解(掃盲篇)詳解數據庫中跨庫數據表的運算200行代碼輕松實現一個簡單的區塊鏈什么是數據庫索引 有哪些類型和特點一個多表查詢的sql語句
    免責聲明 - 關于我們 - 聯系我們 - 廣告聯系 - 友情鏈接 - 幫助中心 - 頻道導航
    Copyright © 2017 www.13333515.buzz All Rights Reserved
    3排列五开奖结果