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) .