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

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Sql Server - Sql實現行列轉換方便了我們存儲數據和呈現數據

Sql實現行列轉換方便了我們存儲數據和呈現數據

2020-07-09 16:39MSSQL教程網 Sql Server

pivot和unpivot實現行列轉換,這極大的方便了我們存儲數據和呈現數據,下面對這兩個關鍵字進行分析,結合實例講解如何存儲數據,如何呈現數據

從MS Sql Server 2005微軟就推出了pivot和unpivot實現行列轉換,這極大的方便了我們存儲數據和呈現數據。今天就對這兩個關鍵字進行分析,結合實例講解如何存儲數據,如何呈現數據。
例如學生選課和成績系統中就有一張表,該表存儲了學生的課程成績,我們無法去預料課程的多少,因此一般表會設計為下面這樣:
圖1
Sql實現行列轉換方便了我們存儲數據和呈現數據 
最后一列是課程編號,這樣無論開學之后還會不會增加課程供學生選擇,都沒有關系。那么我們要呈現給用戶看的報表一般是這樣的:
圖2
Sql實現行列轉換方便了我們存儲數據和呈現數據 
可以看到存儲數據的時候采用的是列式存儲,最終呈現的數據是行式顯示,如何實現?下面詳細分析講解:
創建表語句

復制代碼 代碼如下:


USE [master]
GO
/****** Object: Table [dbo].[Table_1] Script Date: 08/06/2013 13:55:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Table_1](
[name] [varchar](50) NOT NULL,
[score] [real] NOT NULL,
[subject_id] [int] NOT NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO


插入測試數據

復制代碼 代碼如下:


insert into [master].[dbo].[Table_1] ([name],[score],[subject_id]) values( '張三' , 90 , 1 );
insert into [master].[dbo].[Table_1] ([name],[score],[subject_id]) values( '張三' , 80 , 2 );
insert into [master].[dbo].[Table_1] ([name],[score],[subject_id]) values( '張三' , 70 , 3 );
insert into [master].[dbo].[Table_1] ([name],[score],[subject_id]) values( '王五' , 50 , 1 );
insert into [master].[dbo].[Table_1] ([name],[score],[subject_id]) values( '王五' , 40 , 2 );
insert into [master].[dbo].[Table_1] ([name],[score],[subject_id]) values( '李四' , 60 , 1 );


現在查詢下Table_1中的數據即為圖1中的結果,現在我們要得到圖2的結果,那么使用下面的語句:

復制代碼 代碼如下:


SELECT [name],[1],[2],[3]
FROM [master].[dbo].[Table_1]
pivot
(
sum(score) for subject_id in ([1],[2],[3])
) as pvt
GO


如果本身數據庫表存儲的就是圖2那樣,要變成圖1的方式呈現,那就需要用unpivot,可以這樣做:

復制代碼 代碼如下:


SELECT [name],[subject_id],[score]
FROM
(
SELECT [name],[1],[2],[3]
FROM [master].[dbo].[Table_1]
pivot
(
sum(score) for subject_id in ([1],[2],[3])
) as pvt
) p
unpivot
(
score for subject_id in([1],[2],[3])
) as unpvt


當然我還是在Table_1的基礎上先用pvt轉為為行式存儲的方式,再用unpivot進行列式呈現。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 思热99re视热频这里只精品 | 国产精品美女久久久久av麻豆 | 成人精品国产 | 91精品国产一区二区 | 一区视频在线 | 91av电影在线观看 | 狠狠的日 | av毛片 | 欧美a级成人淫片免费看 | 国产精品国产精品国产专区不卡 | 日韩视频久久 | 欧美高清免费 | 色天天综合久久久久综合片 | 亚洲国产成人av好男人在线观看 | 国产欧美日韩 | 国产二区视频 | 一级片免费视频 | 日韩黄网 | 黄在线看v | 亚洲一区二区精品视频 | 黄大片在线观看 | 亚洲中午字幕 | 成人在线高清 | 少妇黄色一级片 | 日本免费一区二区三区四区 | 日韩男女视频 | 日韩欧美在线免费观看 | 任你躁久久久久久妇女av | 国产黄色免费网站 | 色噜噜狠狠狠综合曰曰曰88av | 欧美3区 | 国产精品一区三区 | 天天色成人综合网 | 在线视频一区二区三区 | 久久久国产99久久国产一 | 毛片在线观看网站 | 日本中文字幕在线免费观看 | 天天干天天草 | 欧美激情一区二区三级高清视频 | 久久久久久一级片 | 欧美久久久久久久 |