1. 程式人生 > >Oracle 11g Pivot函式實現行轉列

Oracle 11g Pivot函式實現行轉列

先上語法規範:
SELECT ....
FROM 
   PIVOT
     (
      aggregate-function()
      FOR  IN (, ,..., )
        ) AS 
WHERE .....
通過一個例子說明其用法:
select * from (select salary, department_id from employee) 
pivot(sum(salary) as sum_sal for(department_id) in (10,20,30));
10_sum_sal 20_sum_sal 30_sum_sal
370000	    155000	370000
在這個例子中,工資按照指定部門做聚集後,成為獨立的列顯示出來。有幾個部門,就有幾列;而總是隻有一行。即是說,達到了行轉列的效果。這種效果的報表在BI/DW應用中很常見。
注意:IN語句是必須的。也就是說,在執行SQL之前必須知道department_id
再進一步,按照多個列作行轉列
select * from (select salary, department_id,manager from employee) 
pivot(sum(salary) for(department_id,manager) in ((10,28),(10,null),(20,null)));
10_28   10_null 20_null
270000	100000	90000
這個SQL查詢按照指定部門和經理的組合聚合後的工資。相當於按照兩個維度來做聚集。
兩個pivot,這時列數增加1倍。但是for() in()內容需要保持一致,否則Oracle無法確定你的列名,列的資料型別。
求各部門總工資和平均工資
select * from (select salary, department_id from employee) 
pivot(sum(salary) sumsal, avg(salary) avgsal for(department_id) in (10,20,30));
10_sum  10_avg  20_sum 20_avg   30_sum  30_avg
370000	74000	155000	77500	370000	185000

相關推薦

Oracle 11g Pivot函式實現

先上語法規範: SELECT .... FROM PIVOT ( aggregate-function() FOR IN (, ,..., )

Oracle SQL函式pivot、unpivot函式實現轉行

函式PIVOT、UNPIVOT轉置函式實現行轉列、列轉行,效果如下圖所示: 1.PIVOT為行轉列,從圖示的左邊到右邊 2.UNPIVOT為列轉行,從圖示的右邊到左邊 3.左邊為縱表,結構簡單,易擴充套件 4.右邊為橫表,展示清晰,方便查詢 5.很多時候業務表為縱表,但是統

Oracle 11g Pivot函式實現轉行

先上語法規範: SELECT ....FROM    PIVOT     (      aggregate-function()      FOR  IN (, ,..., )        ) AS WHERE ..... 通過一個例子說明其用法:select * fro

PIVOT函式

PIVOT函式的格式如下 PIVOT(<聚合函式>([聚合列值]) FOR [行轉列前的列名] IN([行轉列後的列名1],[行轉列後的列名2],[行轉列後的列名3],.......[行轉列後的列名N])) <聚合函式>就是我們使用的SUM,COUNT,AVG等

oracle 11g及之前版本方法總結

oracle 資料處理過程中經常遇到資料行列轉換的需求,故現整理自己用的一些方法供大家參考 方法一: 使用自帶的轉換函式wmsys.wm_concat() 源資料如下 select t.rank, t.Name from t_menu_item t;

除錯經驗——使用自定義函式Oracle實現類似LISTAGG函式(字串連線)功能

問題描述: LISTAGG函式是一個很實用的函式,但僅在Oracle 11.2以後的版本中才有。 生產環境中有個資料庫是Oracle 11.1,需要行轉列,但並不能使用LISTAGG函式。 解決方法: 參考以下文章: https://oracle-base.com/artic

SqlServer PIVOT函式快速實現,UNPIVOT實現轉行

我們在寫Sql語句的時候沒經常會遇到將查詢結果行轉列,列轉行的需求,拼接sql字串,然後使用sp_executesql執行sql字串是比較常規的一種做法。但是這樣做實現起來非常複雜,而在SqlServer2005中我們有了PIVOT/UNPIVOT函式可以快速實現行轉列和

sql內建函式pivot強大的功能

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

MySQL中GROUP_CONCAT函式長度限制處理/實現的功能

MySQL提供了一個很方便的函式group_concat可以實現行轉列的功能。 SELECT t.*, (SELECT GROUP_CONCAT(fellow_company_id) v1 FROM t_trade_fellow a WHERE fellow_type = '1' AND a.company_

使用pivot和unpivot語句實現,轉行

在做報表時,經常需要將資料表中的行轉列,或者列轉行,如果不知道方法,你會覺得通過SQL語句來實現非常難。這裡,我將使用pivot和unpivot來實現看似複雜的功能。 引用MSDN: 可以使用 PIVOT 和 UNPIVOT 關係運算符將表值表示式更改為另一個表。PIVOT

經常用到的透視函式&轉行)函式 PIVOT()&UNPIVOT

 說明: 工作中經常遇到一組or一條資料按照不同型別被分成多條資料,如 一條合同的分期還款賬單按照不同型別被分成本金,利息,管理費等, 資料統計工作中,一條合同一期就會分成多條合同 如 實際工作中 常需要將同一期多條資料整合成一期並且賬單條目型別橫向顯示,即資料透視過程:

sql內置函數pivot強大的功能

子查詢 註意 ges 中一 rom cnblogs blog 聚合函數 星期六 http://blog.csdn.net/xb12369/article/details/8149608 http://www.cnblogs.com/lwhkdash/archive/20

oracle 存儲過程-動態,解決。

pla gin sel rom con left join from blog creat 包頭 create or replace package pro_test as TYPE out_cursor IS REF CURSOR; procedure A

SQL語句實現

within sel 11g wm_concat 進行 com 10g 本地測試 from 最近在維護一個項目,出現了一下bug需要進行調試,於是把正式庫上面的代碼搬到本地庫上面,數據庫是本地的,跑項目的時候調試發現代碼裏面帶有wmsys.wm_concat函數的SQL語句

SQL資料庫查詢實現轉行結果SQL語句

 CREATETABLE[StudentScores](    [UserName]NVARCHAR(20),        --學生姓名[Subject]NVARCHAR(30),        --科目[Score]FLOAT,               --成績)INSERTINTO[StudentS

SQL2005/2008中實現的2種方法

  CREATE TABLE sales.salesByMonth(year char(4),month char(3),amount money,PRIMARY KEY (year, month))INSERT INTO sales.salesByMonth (year,

MySQL 如何實現分級輸出?

概述好久沒寫SQL語句,今天看到問答中的一個問題,拿來研究一下。情景簡介學校裡面記錄成績,每個人的選課不一樣,而且以後會新增課程,所以不需要把所有課程當作列。資料表裡面數據如下圖,使用姓名+課程作為聯合主鍵(有些需求可能不需要聯合主鍵)。本文以MySQL為基礎,其他資料庫會有

如何優雅地使用R實現

網上有網友問到:在一個資料夾下,收集了幾個股票資料的檔案,對應的股票名稱為第2列,對應的時間為第3列,對應的收盤價為第10列。 現在想做到下圖所示的效果,也就是行為時間,列為對應的股票的收盤

MySQL 實現SQL

概述 好久沒寫SQL語句,今天看到問答中的一個問題,拿來研究一下。 情景簡介 學校裡面記錄成績,每個人的選課不一樣,而且以後會新增課程,所以不需要把所有課程當作列。資料表裡面數據如下圖,使用姓名+課程作為聯合主鍵(有些需求可能不需要聯合主鍵)。本文以MySQL為基

linq實現

nt maxcount = Model .SelectMany(h => h.DetailList).OrderBy(h => h.DetailType) .