国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

透視轉換

2024-07-21 02:49:06
字體:
來源:轉載
供稿:網友
透視轉換

從這一篇開始要總結的是透視和逆透視,那么什么是透視和逆透視呢?透視是將數據從行的狀態轉換成列的狀態,而逆透視則是將數據從列的狀態轉換成行的狀態。它們一般應用在生成報表的場景中。

每個透視轉換都會涉及三個邏輯處理階段,每個階段都有相關元素;分組階段處理相關的分組或行元素,擴展(SPReading)階段處理相關的擴展或列元素,聚合階段處理相關的聚合元素和聚合函數。

下面是一個關于透視轉換的示例。

USE tempdb;GO-- 透視轉換-- 準備測試數據IF OBJECT_ID('dbo.Orders','U') IS NOT NULL DROP TABLE dbo.Orders;GOCREATE TABLE dbo.Orders(    orderid INT NOT NULL,    orderdate DATETIME NOT NULL,    empid INT NOT NULL,    custid VARCHAR(5) NOT NULL,    qty INT NOT NULL,    CONSTRAINT PK_Orders PRIMARY KEY(orderid));INSERT INTO dbo.Orders(orderid,orderdate,empid,custid,qty) VALUES     (30001,'20070802',3,'A',10),    (10001,'20071224',2,'A',12),    (10005,'20071224',1,'B',20),    (40001,'20080109',2,'A',40),    (10006,'20080118',1,'C',14),    (20001,'20080212',2,'B',12),    (40005,'20090212',3,'A',10),    (20002,'20090216',1,'C',20),    (30003,'20090418',2,'B',15),    (30004,'20070418',3,'C',22),    (30007,'20090907',3,'D',30);    -- 原始的行狀態(生成的一個報表,包含每個職員和客戶組合之間的總訂貨量)SELECT empid,custid,SUM(qty) AS sumqty FROM dbo.OrdersGROUP BY empid,custid;

得到原始行的狀態,如下圖:

image

實現透視轉換有兩種解決方案,一是使用標準的SQL,另一種是使用PIVOT運算符進行轉換。下面是示例代碼。

-- 1,使用標準SQLSELECT empid,    SUM(CASE WHEN custid='A' THEN qty END) AS A,    SUM(CASE WHEN custid='B' THEN qty END) AS B,    SUM(CASE WHEN custid='C' THEN qty END) AS C,    SUM(CASE WHEN custid='D' THEN qty END) AS D FROM dbo.OrdersGROUP BY empid;-- 2,PIVOT運算符SELECT empid,A,B,C,DFROM (SELECT empid,custid,qty FROM dbo.Orders) AS DPIVOT(SUM(D.qty) FOR D.custid IN (A,B,C,D)) AS P;

透視轉換后的效果如下圖。

image


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 福鼎市| 布尔津县| 木兰县| 潜江市| 罗江县| 抚顺市| 连平县| 行唐县| 宁远县| 康平县| 衡南县| 陆河县| 东乡族自治县| 昆明市| 永平县| 册亨县| 丹凤县| 张家口市| 长子县| 广安市| 宜城市| 尤溪县| 九龙县| 丹寨县| 前郭尔| 阳新县| 武功县| 大庆市| 咸丰县| 泸溪县| 常宁市| 榆树市| 邯郸市| 巴南区| 吴堡县| 启东市| 遂宁市| 方山县| 淮阳县| 灵石县| 黑水县|