1. 程式人生 > >淺談SQLServer行列轉換PIVOT函式的使用

淺談SQLServer行列轉換PIVOT函式的使用

以學生表舉個例子,展現學生的各門學科和成績,我們先新建一張表(表中插入測試值的時候用到了rand取隨機數,沒用過的可以瞭解下-->點選開啟):
Create Table Students(Name varchar(10), Subject Nvarchar(10),Score int)  
Insert into Students  
Select 'Andy' ,'Chiness',round(60+40*rand(),0) Union all  
Select 'Burgess' ,'Chiness',round(60+40*rand(),0) Union all  
Select 'Ula' ,'Chiness',round(60+40*rand(),0) Union all  
Select 'Lily' ,'Chiness',round(60+40*rand(),0) Union all  
Select 'Demon' ,'Chiness',round(60+40*rand(),0) Union all  
Select 'Andy' ,'Math',round(60+40*rand(),0) Union all  
Select 'Burgess' ,'Math',round(60+40*rand(),0) Union all  
Select 'Ula' ,'Math',round(60+40*rand(),0) Union all  
Select 'Lily' ,'Math',round(60+40*rand(),0) Union all  
Select 'Demon' ,'Math',round(60+40*rand(),0) Union all    
Select 'Andy' ,'English',round(60+40*rand(),0) Union all  
Select 'Burgess' ,'English',round(60+40*rand(),0) Union all  
Select 'Ula' ,'English',round(60+40*rand(),0) Union all  
Select 'Lily' ,'English',round(60+40*rand(),0) Union all  
Select 'Demon' ,'English',round(60+40*rand(),0)
這張表的呈現形式如下: 通過行列轉換函式:
SELECT * FROM Students
PIVOT(MAX(SCORE) FOR Subject IN(Chiness,Math,English) ) AS PVT
這邊需要留意一下PIVOT函式使用的結構了,首先是寫一個查詢語句,然後是對這個查詢結果集中的某一列的值進行了行列轉換的操作(我這裡是把學科這一列的值“語文、數學、英語”轉換為列),其中還必須包含了一個聚集函式(聚集函式一共有5個,分別是:count、sum、max、min、avg,無論是用哪一個聚集函式都代表著不同的意義,我這裡用的MAX,針對這裡聚集函式的使用我在後面的篇章中有講到-->
點選開啟
) 呈現形式如下: 注:pivot函式前面接的一定是一條查詢語句,我上面的這條例子查詢語句比較簡單,直接select * from 也就通過了,最終結果也沒有報錯,其實正規來講,如果select 語句比較複雜,這種寫法可能會報錯的,下面有一種保險一點的寫法: SELECT * FROM ( --這裡寫複雜的sql查詢語句 ) a PIVOT(--此次省略相關code) AS PVT 之前的例子可以這樣寫:
SELECT * FROM (
SELECT * FROM Students
) a
PIVOT(MAX(SCORE) FOR Subject IN(Chiness,Math,English) ) AS PVT
最終的執行結果是一樣的!
和PIVOT相反的還有一個UNPIVOT行數,顧名思義,一個是“行轉列”另一個就是“列轉行”,好了,這個函式的使用方法我會在下一篇介紹~~

相關推薦

SQLServer行列轉換PIVOT函式的使用

以學生表舉個例子,展現學生的各門學科和成績,我們先新建一張表(表中插入測試值的時候用到了rand取隨機數,沒用過的可以瞭解下-->點選開啟): Create Table Students(Name varchar(10), Subject Nvarchar(10),S

sqlserver 和 mysql儲存過程、函式的區別

其實我不太喜歡搞資料庫,平常也就是用用select、insert。這次公司要把資料庫從sqlserver遷到mysql,我也試著改了幾個儲存過程,在此總結。首先吐槽一句,sqlserver和 mysql差別還真大! 區別一:儲存過程入參 USE [LearningRep

SQLServer與MySQL的區別

mysql的日期 1) 獲得當前日期函式:curdate(),current_date() 2) 獲得當前時間函式:curtime(); 3) 獲得當前日期+時間:now(); 4) MySQL dayof… 函式:dayofweek(), dayofmonth(), dayofyear()分別返回

BZOJ 2440 莫比烏斯函式性質推導

世界真的很大 莫比烏斯絕不是隻有反演而已,其本身就是一個非常值得專研的函式 本質上來講大概是指容斥時的係數規劃,但也由此演化出了各種各樣的有意思的東西 看題先: description

序列訊號 轉換成 並行訊號 原理

注 :  文中講述的原理是推理和探討 , 和現實中的實現不一定完全相同 。   開始之前, 可以先參考看看我之前寫的兩篇文章 : 《設計一個 硬體 實現的 Dictionary(字典)》  https://www.cnblogs.com/KSongKing/p/1

c++中的建構函式

下面所有的建構函式都將用Student這個類作為例子 class Student { private: static int count;//不屬於任何一個物件 std::string name; char *gender; i

js中的eval()函式

1.定義 eval()是一個函式,有且只有一個引數string,為字串型別 eval(string) 特點:若string為js程式碼時,會直接解析執行,若是普通字串,則返回原字串。 2.例項 2.1引數string為js程式碼: eval("va

SQL Server中行列轉換 Pivot UnPivot

PIVOT用於將列值旋轉為列名(即行轉列),在SQL Server 2000可以用聚合函式配合CASE語句實現 PIVOT的一般語法是:PIVOT(聚合函式(列) FOR 列 in (…) )AS P 完整語法: table_source PIVOT( 聚合函式(value_column) FOR piv

javascript之事件、函式、方法、物件 各代表何含義,通俗解釋及其之間的關聯與區別

簡單來說: 在javascript中,所有的事件都是通過函式來執行的,函式本身即是動作(針對事件來說),也是方法(針對物件來說)!物件是指的誰觸發了事件,繫結事件的主謀。 【事件】事件就如神經開關,刺

網路地址轉換(NAT)技術與內網、外網

前言  我們現在常使用的IP地址是IPv4地址,由四組0-255的十進位制數字組成,中間以小數點分隔。Internet上的每一臺主機或者路由器都至少有一個IP地址。IP地址(IPv4地址,下文IP地址預設指IPv4)的長度是32位,總數為2的32次方,大約43億個。  

JS中的高階函式

在JavaScript中,函式的功能十分強大。它們是第一類物件,也可以作為另一個物件的方法,還可以作為引數傳入另一個函式,不僅如此,還能被一個函式返回!可以說,在JS中,函式無處不在,無所不能,堪比孫猴子呀!當你運用好函式時,它能助你取西經,讓程式碼變得優雅簡潔,運用不好

【Unity教程】Unity呼叫其他指令碼函式的方法(未完)

第一種,被呼叫指令碼函式為static型別,呼叫時直接用  指令碼名.函式名() 這種就是單例,簡單的單例的使用 如果程式碼過多,程式碼之間相互呼叫單例,每一次呼叫就會生成一個單例,如果程式碼過多, 就不方便程式碼的維護,造成程式效能的重要流失,因此不建議依賴使用單例 使用這種方法,必須在類的前面新增關鍵字

SQL Server 2005 中行列轉換(Pivot 和 UNPivot的使用)

針對sql2005  系統提供兩個新的關鍵字 PIVOT 和UNPIVOT可用來作此類操作.語法規則<pivot_clause> ::=        ( aggregate_function ( value_column )         FOR pivot_

C/C++回撥函式(Callback)& 函式指標

摘要:回撥函式就是一個通過函式指標呼叫的函式。如果你把函式的指標(地址)作為引數傳遞給另一個函式,當這個指標被用來呼叫其所指向的函式時,我們就說這是回撥函式。回撥函式不是由該函式的實現方直接呼叫,而是在特定的事件或條件發生時由另外的一方呼叫的,用於對該事件或條件進行響應。

對vue生命週期函式的理解

1.什麼是vue生命週期?有什麼作用? 每個 Vue 例項在被建立時都要經過一系列的初始化過程——例如,需要設定資料監聽、編譯模板、將例項掛載到 DOM 並在資料變化時更新 DOM 等。同時在這個過程中也會執行一些叫做 生命週期鉤子 的函式,這給了使用者在不同

Go型別轉換之間的那些事

試著答一答這些問題 s[i]和(for _,v range)的v的區別是什麼 var s string = "AB" fmt.Println(reflect.TypeOf(s[0])) for _, v := range s { fmt.Println(reflect.TypeOf(v)) } a.()

Oracle 行列轉換函式pivot的使用(二)

關鍵函式pivot,其用法如下 pivot(聚合函式 for 列名 in(型別)) select * from table_name pivot(max(column_name)           

SQL中PIVOT 行列轉換

tor 子句 輸入 ble ont 運算符 之間 忽略 sql語句 本文導讀:T-SQL語句中,Pivot運算符用於在列和行之間對數據進行旋轉或透視轉換,PIVOT命令可以實現數據表的列轉行,同時執行聚合運算,UNPIVOT則與其相反,實現數據的行轉列。 PIVOT通過將

SqlServer系列】SQL Server事務與鎖(上篇)

架構 tab 要求 允許 ble 1.2 定義 由於 數據庫引擎 一 概述 在數據庫方面,對於非DBA的程序員來說,事務與鎖是一大難點,針對該難點,本篇文章試圖采用圖文的方式來與大家一起探討。 “淺談SQL Server 事務與鎖”這個專題共分

C#語言中的各種數據類型,與數據類型之間的轉換

優化配置 line com 歸類 浮點 初學者 結構 ali 順序 什麽是數據類型? 數據類型,百度百科是這樣解釋的:數據類型在數據結構中的定義是一個值的集合以及定義在這個值集上的一組操作。這樣的解釋對於一個初學者來說未必太過於深奧。 簡單點說,數據類型就是不同長度的數據的