Oracle行轉列語法總結大全

一、decode語法

  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
SELECT deptno,       nvl(SUM(decode(job, 'MANAGER', sal)), 0) s_MANAGER,       nvl(SUM(decode(job, 'ANALYST', sal)), 0) s_ANALYST,       nvl(SUM(decode(job, 'CLERK', sal)), 0) s_CLERK,       nvl(SUM(decode(job, 'PRESIDENT', sal)), 0) s_PRESIDENT,       nvl(SUM(decode(job, 'SALESMAN', sal)), 0) s_SALESMAN  FROM empGROUP?BY?deptno;

圖片

二、CASE語法

  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
SELECT deptno,       nvl(sum(case when job = 'MANAGER' then sal else 0 end),0)  s_MANAGER,       nvl(sum(case when job = 'ANALYST' then sal else 0 end),0)  s_ANALYST,       nvl(sum(case when job = 'CLERK' then sal else 0 end),0)    s_CLERK,       nvl(sum(case when job = 'PRESIDENT' then sal else 0 end),0)  s_PRESIDENT,       nvl(sum(case when job = 'SALESMAN' then sal else 0 end),0)  s_SALESMAN  FROM emp?GROUP?BY?deptno;

圖片

?

三、PIVOT語法

  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
WITH p AS (SELECT deptno, job, sal FROM emp)SELECT *  FROM p pivot(SUM(sal) FOR job IN('MANAGER' AS s_MANAGER,                                   'ANALYST' AS s_ANALYST,                                   'CLERK' AS s_CLERK,                                   'PRESIDENT' AS s_PRESIDENT,                                   'SALESMAN' AS s_SALESMAN));

圖片

?

不過這個地方null值沒有替換成0,要通過nvl再轉換一下。

  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
  • ?
WITH p AS (SELECT deptno, job, sal FROM emp),tmp AS (SELECT *    FROM p pivot(SUM(sal) FOR job IN('MANAGER' AS s_MANAGER,                                     'ANALYST' AS s_ANALYST,                                     'CLERK' AS s_CLERK,                                     'PRESIDENT' AS s_PRESIDENT,                                     'SALESMAN' AS s_SALESMAN)))SELECT deptno,       nvl(s_MANAGER, 0) s_MANAGER,       nvl(s_ANALYST, 0) s_ANALYST,       nvl(s_CLERK, 0) s_CLERK,       nvl(s_PRESIDENT, 0) s_PRESIDENT,       nvl(s_SALESMAN, 0) s_SALESMAN  FROM tmp

圖片

?

小結:

decode 語法簡單,Oracle獨有。
case sql標準語法。
pivot 語法最為簡單,Oracle、sqlserver、postgresql均可以使用。

?

下面再來講講wm_concat、listagg、xmlagg。

?

需求:部門編號為20的所有的員工信息,以行的形式顯示。

?

四、wm_contact語法

  • ?
  • ?
  • ?
  • ?
SELECT T.DEPTNO, wm_concat(t.ename) names  FROM EMP T WHERE T.DEPTNO = '20' GROUP BY T.DEPTNO;

?

圖片
圖片

?

五、listagg語法

  • ?
  • ?
  • ?
  • ?
  • ?
SELECT T.DEPTNO,       listagg(T.ENAME, ',') WITHIN GROUP(ORDER BY T .ENAME) names  FROM EMP T WHERE T.DEPTNO = '20' GROUP BY T.DEPTNO;

圖片

六、xmlagg語法

  • ?
  • ?
  • ?
  • ?
  • ?
SELECT T.DEPTNO,       xmlagg(XMLELEMENT(T, ',',T.ENAME) ORDER BY T .ENAME).EXTRACT ('//text()') names  FROM EMP T WHERE T.DEPTNO = '20' GROUP BY T.DEPTNO;

圖片

圖片

?

小結:

wm_concat 語法最簡單,但是默認是 clob列,plsql不容易導出。
listtagg 語法稍微復雜,但是默認是字符串,性能會比wm_concat 好,但是超過4000個字符,受限制。
xmlagg 字符串超過4000字符,就需要使用xmlagg

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535407.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535407.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Shell 各種符號 之 含義

#!&#xff1a;符號能夠被內核識別成是一個腳本的開始&#xff0c;這一行必須位于腳本的首行 $0&#xff1a;當前腳本的名字 $#&#xff1a;輸入<調用>參數(腳本或函數的位置參數) 的個數&#xff0c;如 NumArg$#&#xff1b;echo"\$#: $#;\$NumArg: $NumArg"…

Nginx的11個執行流程

1 Nginx簡介 Web服務器市場份額 Nginx [engine x] 最初由 Lgor Sysoev 編寫。根據 Netcraft 的數據&#xff0c;到2020年9月&#xff0c;Nginx 服務或代理了25.76&#xff05;站點&#xff0c;市場份額占到了約34.03&#xff05;。 Nginx 被廣泛用作&#xff1a; HTTP服務器…

Nginx的執行階段詳解

在了解nginx的執行階段前&#xff0c;先看一個例子 對echo不熟悉的&#xff0c;可以先看文章Nginx調試必備了解下echo擴展 回到上面這個例子&#xff0c;在server塊中配置這樣的location&#xff0c;你覺得輸出是什么樣子&#xff1f; 按照正常的邏輯&#xff0c;輸出應該是32 …

Docker掛了,數據如何找回

docker在實際使用中&#xff0c;讓運維人員詬病的&#xff0c;除了安全問題外&#xff0c;大概就是數據的問題了 很多人在初用docker的時候&#xff0c;很多時候都忘記或不知道docker中需要保留的數據需要掛載到宿主機文件夾到容器內部對應目錄&#xff08;當然除了掛載宿主機目…

TCP總結

TCP這些東西&#xff0c;基本每個程序猿都或多或少是掌握的了。雖然感覺在實際開發中沒有什么用武之處&#xff0c;但&#xff0c;面試他要問啊 而最近大家伙過完年&#xff0c;也都在準備春招&#xff0c;我也一樣。閱讀了一些okHttp源碼之后&#xff0c;又屁顛屁顛地跑回來重…

Shell 中各種括號的作用

一、小括號&#xff0c;圓括號&#xff08;&#xff09; 1、單小括號 () ①命令組。括號中的命令將會新開一個子shell順序執行&#xff0c;所以括號中的變量不能夠被腳本余下的部分使用。括號中多個命令之間用分號隔開&#xff0c;最后一個命令可以沒有分號&#xff0c;各命令和…

linux基線核查腳本

#!/bin/bash #version 2.0cat <<EOF ************************************************************************************* ***** linux基線檢查腳本 ***** ************************************************************************************* *…

LDAP命令介紹---dsreplication

可以使用此實用程序來配置服務器之間的復制, 以使服務器數據保持同步。要正確進行復制, 必須先使用 enable 子命令啟用復制, 然后再使用 initialize 子命令將一個服務器的內容初始化為另一個服務器的內容用法: dsreplication {子命令} {選項}可用子命令:disable對指定服務器中…

LDAP命令介紹---dsconfig

此實用程序可用于定義目錄服務器的基本配置 用法: dsconfig {子命令} {選項} 獲取子命令用法列表: --help-distribution 顯示與 分發 相關的子命令 --help-general-configuration 顯示與 一般配置 相關的子命令 --help-integration 顯示與 集成 相關的子命令 --…

LDAP命令介紹---dsconfig子命令----help-distribution顯示與分發相關的子命令

此實用程序可用于定義目錄服務器的基本配置用法: dsconfig {子命令} {選項}可用子命令:create-distribution-algorithm創建分發算法create-distribution-partition創建分發分區create-workflow-element --type distribution創建分發工作流元素create-global-index創建全局索引…

LDAP命令介紹---ldappasswordmodify口令修改操作

此實用程序可用于在目錄服務器中執行 LDAP 口令修改操作用法: ldappasswordmodify {選項}其中 {選項} 包括:-a, --authzID {authzID}應更改口令的用戶條目的授權 ID -A, --provideDNForAuthzID將綁定 DN 用作口令修改操作的授權 ID -n, --newPassword {newPassword}為目標用戶…

LDAP命令介紹---dstune

此實用程序可用于幫助您優化 OUD 目錄服務器。 您可以選擇自動或基于其他標準 (例如, 內存限制或服務器將包含的數據) 優化服務器用法: dstune {子命令} {選項}可用子命令:data-based使用描述目錄服務器將包含的數據的信息優化服務器。使用 --ldifFile 可基于 LDIF 文件的內容…

LDAP命令介紹---dsreplication--initialize

initialize 將目標服務器中指定基礎 DN 下的數據內容初始化為源服務器的內容。要正確進行復制, 在啟用復制后必須執行該操作 (也可以使用 initialize-all 達到該目的) initialize-all 對于正在復制其內容的所有服務器, 將它們指定基礎 DN 下的數據內容初始化為指定…

LDAP命令介紹---dsreplication--enable:DISABLE

enable 用法: dsreplication enable {選項} 更新服務器的配置以復制指定基礎 DN 下的數據。如果某個指定的服務器正在復制其他服務器中基礎 DN 下的數據, 執行此子命令將會更新所有服務器的配置 (因此, 對于每個添加到復制拓撲中的服務器, 將都能執行一次命令行)全局選項:請參…

LDAP命令介紹---import-ldif

[oracleoud bin]$ ./import-ldif --help 此實用程序可用于將 LDIF 數據導入目錄服務器后端用法: import-ldif {選項}其中 {選項} 包括:-l, --ldifFile {ldifFile}要導入的 LDIF 文件的路徑 -A, --templateFile {templateFile}用于生成導入數據的 MakeLDIF 模板的路徑 -a, --ap…

LDAP命令介紹---verify-index--驗證索引

[oraclelocalhost bin]$ ./verify-index -b "DCCOM" telephoneNumber 在解析命令行參數時出現錯誤: 參數 "telephoneNumber" 沒有以一個或兩個破折號開頭, 并且不允許未命名的結尾參數 此實用程序可用于確保基于 Berkeley DB Java Edition 的后端中的索引…

LDAP----manage-account

[oraclelocalhost bin]$ ./manage-account -D "cndirectory manager" -j pwd-file get-all \ > > --targetDN uidkvaughan,ouPeople,dcexample,dccom 在解析命令行參數時出現錯誤: 無法接受為參數 -j 提供的值 "pwd-file": 為參數 bindpwfile 指定…

LDAP組的概念以及命令

Oracle統一目錄支持組&#xff0c;組是作為單個對象管理的條目集合。通常&#xff0c;目錄管理員配置打印機組、軟件應用程序組、員工組等。在為一組用戶分配特殊訪問權限時&#xff0c;組尤其有用。例如&#xff0c;您可以配置一組訪問管理器&#xff0c;并分配權限&#xff0…

oracle中修改process

可以用如下命令查看數據庫連接的消耗情況 select b.MACHINE, b.PROGRAM, b.USERNAME, count(*) from v$process a, v$session b where a.ADDR b.PADDR and b.USERNAME is not null group by b.MACHINE, b.PROGRAM, b.USERNAME order by count(*) desc 在 oracle中&…

V$LICENSE表結構

V$LICENSE V$LICENSE 顯示有關許可限制的信息。 列名 數據類型 描述 SESSIONS_MAX NUMBER 實例允許的最大并發用戶會話數 SESSIONS_WARNING NUMBER 實例的并發用戶會話的警告限制 SESSIONS_CURRENT NUMBER 當前并發用戶會話數 SESSIONS_HIGHWATER NUMBER 自實…