oracle行轉列、列轉行
行轉列:PIVOT
列轉行:UNPIVOT
這兩個是在oracle11g上面新增的函式。下面舉例說明用法。
PIVOT:
學生成績表,原資料:
select class_name, student_name, course_type, result, created_date
from class_tmp_2;
每個同學的兩門成績,是兩條資料,因為業務需要,展示給使用者看的時候,使用者想要每個同學只要一條資料,並且把所有成績都展示出來,比如
這個時候就需要用到行專列函式PIVOT.
SELECT class_name, student_name, 語文, 數學, created_date
FROM (SELECT CLASS_NAME, STUDENT_NAME, COURSE_TYPE, RESULT, CREATED_DATE
FROM CLASS_TMP_2 ) T
PIVOT(SUM(RESULT)
FOR COURSE_TYPE IN('語文' AS 語文, '數學' AS 數學));
淺灰色的sql和上面的原資料sql一樣,主要看一下後面的PIVOT部分。
sum(result):成績之和(PIVOT內需有聚集函式)
for course_type in ('語文' as語文, '數學' as數學):將course_type列的欄位值轉換成列名,其中,欄位值是'語文',轉換成語文列,欄位值是'數學',轉換成數學列,這兩列的欄位值,即前面的sum(result)。
不用函式也可以得到,如下sql:
select t1.class_name, t1.student_name, t1.result 語文, t2.result 數學, t1.created_date from (select a.class_name, a.student_name, a.course_type, a.result, a.created_date from class_tmp_2 a where a.course_type = '語文') t1, (select a.class_name, a.student_name, a.course_type, a.result, a.created_date from class_tmp_2 a where a.course_type = '數學') t2 where t1.class_name = t2.class_name and t1.student_name = t2.student_name;
UNPIVOT:列轉行
反過來,原資料如下:
而我想要得到的結果如下:
SQL:
select class_name, student_name, course_type, result, created_date
from class_tmp
unpivot(result for course_type in(chinese_result,math_result));
原資料的chinese_result列和math_result列的列名(淺灰色),將轉換為新建列course_type的欄位值,表示課種。
原資料的chinese_result列和math_result列的欄位值,將轉換為新建列result
相關推薦
oracle行轉列、列轉行、連續日期數字實現方式及mybatis下實現方式
九月份複習,十月份考試,十月底一直沒法收心,趕在十一初 由於不可抗拒的原因又不得不重新找工作就;欸~, 又是一番折騰,從入職到現在,可又沒法閒下來了... 這次就簡單介紹下oracle資料庫下如何實現行轉列、列轉行及此在mybatis中的實現方式,就具體用法我就不詳細說了,主要介紹下實戰中所碰到的坑
Oracle 行轉列pivot 、列轉行unpivot 的Sql語句總結
多行轉字串 這個比較簡單,用||或concat函式可以實現 print? 1. select concat(id,username) str from app_user 2. 3. select id||username str from app_use
Oracle字串,行轉列、列轉行的Sql語句總結
多行轉字串這個比較簡單,用||或concat函式可以實現 SQL Code 12select concat(id,username) str from app_userselect id||username str from app_user字串轉多列實際上就是拆分字串的問題
oracle行轉列、列轉行
行轉列:PIVOT列轉行:UNPIVOT這兩個是在oracle11g上面新增的函式。下面舉例說明用法。PIVOT:學生成績表,原資料:select class_name, student_name, course_type, result, created_date fr
Oracle SQL函式pivot、unpivot轉置函式實現行轉列、列轉行
函式PIVOT、UNPIVOT轉置函式實現行轉列、列轉行,效果如下圖所示: 1.PIVOT為行轉列,從圖示的左邊到右邊 2.UNPIVOT為列轉行,從圖示的右邊到左邊 3.左邊為縱表,結構簡單,易擴充套件 4.右邊為橫表,展示清晰,方便查詢 5.很多時候業務表為縱表,但是統
使用case when,union all實現sql行轉列、列轉行
-- 建表 CREATE TABLE StudentScores ( UserName NVARCHAR(20), -- 學生姓名 Subject
oracle 行轉列,列轉行
目錄結構如下: 行轉列 列轉行 [一]、行轉列 1.1、初始測試資料 表結構:TEST_TB_GRADE Sql程式碼 createtable TEST_TB_GRADE ( ID NUMBER(10) notnull,
行轉列、列轉行題目(收集中...)
一、列轉行 1、把如下表 year month amount 1991 1 1.1 1991 2 1.2 1991 3 1.3 1991 4 1.4
SQL行轉列、列轉行
SQL行轉列、列轉行 這個主題還是比較常見的,行轉列主要適用於對資料作聚合統計,如統計某類目的商品在某個時間區間的銷售情況。列轉行問題同樣也很常見。 一、整理測試資料 create table wyc
mysql-行轉列、列轉行
group_concat(),函式說明 手冊上說明:該函式返回帶有來自一個組的連線的非NULL值的字串結果; 通俗點理解,其實是這樣的:group_concat()會計算哪些行屬於同一組,將屬於同一組的列顯示出來。要返回哪些列,由函式引數(就是欄位名)決定。分組必須有個標準,就是根據grou
刪除重複資料、行轉列、列轉行
查詢是否有重複資料http://write.blog.csdn.net/postedit/53517081 select name,conunt(*) from test group by name having count(*)>1; 刪除重複資料 delete a
MySQL的行轉列、列轉行、連線字串 concat、concat_ws、group_concat函式用法
1.concat函式 使用方法: CONCAT(str1,str2,…) 返回結果為連線引數產生的字串。如有任何一個引數為NULL ,則返回值為 NULL。 注意: 如果所有引數均為非二進位制字串,則結果為非二進位制字串。 如果自變
Databricks 第11篇:Spark SQL 查詢(行轉列、列轉行、Lateral View、排序)
本文分享在Azure Databricks中如何實現行轉列和列轉行,並介紹對查詢的結果進行排序的各種方式。 一,行轉列 在分組中,把每個分組中的某一列的資料連線在一起: collect_list:把一個分組中的列合成為陣列,資料不去重,格式是['a','a','b'] collect_set:把一個分組中的
Oracle 行轉列
cat pre case nbsp 運用 分隔 nvl ase partition 一、簡易運用 ——>沒轉之前一個主號綁定多個副號的多行輸出(像移動的歡樂在線) SELECT f.town_name 鎮區, f.school_name 學校,
oracle 行轉列,多行轉列
問題描述: 應公司要求,設計功能,一個ID,對應不同的值,展示的時候不同的值拼接展示,如何實現; 解決思路: 1) 拼接字串,想到了 oracle Function(),這樣肯定能實現,但是比較麻煩;
Oracle行轉列+排序
--1.刪除臨時表 drop table biz_bus_station_direct_0711; --2.將站點資料等放入臨時表 create table biz_bus_station_direct
oracle 行轉列例子程式碼
select * from (select deptno,job,sal from emp) pivot( sum(sal) for job in ( 'ANALYST' as analyst_sal, 'MA
偶遇Oracle行轉列
行轉列應該是資料庫比較常見的操作了,在oracle中可以使用pivot、decode,可以參考呆瓜的blog: SELECT name, MAX(DECODE(course, 'j
SQL Server 行轉列,列轉行。多行轉成一列
一、多行轉成一列(並以","隔開)表名:A表資料:想要的查詢結果:查詢語句:SELECT name , value = ( STUFF(( SELECT ',' + value FROM A
Oracle 行轉列小結
最近在工作中,對行轉列進行了應用,在此做一個簡單的小結。 轉換過程如下: 1、建立表結構 CREATE TABLE RowToCol ( ID NUMBE