PLSQL條件(CASE WHEN)語句小應用
平時主要做維護方面工作,開發工作較少,沒怎麼認真的寫過幾行plsql程式碼。昨日一同事打電話諮詢一個小問題,當時覺得很簡單,但一時又想不出怎麼寫,後來靜下心來,終於把語句寫出來了。其實語句非常簡單,只不過是對plsql不熟而已,因此請開發大神莫要拍磚。看來以後還要多看一些開發類的書籍,以便不時之需啊。
去除一些細節,可以歸納為如下內容:表t包含兩個欄位,deptno欄位為部門編號,id欄位為身份證號。
其中ID有18位的,也有15位的,18位和15位的樣例如下:
18位身份證號:110108197211182718
15位身份證號:110108721118271
現在要統計每個部門人數,其中上述15位和18位的身份證號認為同一個人。
背景已經說清楚了,怎麼寫語句呢?很顯然要對id列進行一下簡單的條件處理,然後在進行統計,這裡就用到了case when語句。 具體語法如下
根據上面的語法,我們可以基於t表寫一條簡單的語句:
t表資料記錄:
執行CASE WHEN語句後輸出結果如下,可以看到透過CASE WHEN語句成功的將18位身份證號轉換為了15位。
有了上述SQL後,剩下的就簡單了,經驗證結果正確。
去除一些細節,可以歸納為如下內容:表t包含兩個欄位,deptno欄位為部門編號,id欄位為身份證號。
點選(此處)摺疊或開啟
-
SQL> desc t
Name Null? Type
----------------------------------------- -------- ----------------------------
DEPTNO NUMBER
ID VARCHAR2(30)
18位身份證號:110108197211182718
15位身份證號:110108721118271
現在要統計每個部門人數,其中上述15位和18位的身份證號認為同一個人。
背景已經說清楚了,怎麼寫語句呢?很顯然要對id列進行一下簡單的條件處理,然後在進行統計,這裡就用到了case when語句。 具體語法如下
根據上面的語法,我們可以基於t表寫一條簡單的語句:
點選(此處)摺疊或開啟
-
select deptno,
-
(CASE length(id)
-
WHEN 18 THEN substr(id,1,6)||substr(id,9,9)
- WHEN 15 THEN id
-
END) as id1
- from t
點選(此處)摺疊或開啟
- SQL> select * from t;
-
DEPTNO ID
-
---------- ------------------------------
-
1 110108197211182718
-
1 110108721118271
-
3 110109721118271
-
1 110101198201019713
- 2 110103198201019713
點選(此處)摺疊或開啟
-
SQL> select deptno,
-
(CASE length(id)
-
WHEN 18 THEN substr(id,1,6)||substr(id,9,9)
-
WHEN 15 THEN id
-
END) as id1
- from t;
-
DEPTNO ID1
-
---------- ------------------------------
-
1 110108721118271
-
1 110108721118271
-
3 110109721118271
-
1 110101820101971
- 2 110103820101971
點選(此處)摺疊或開啟
-
SQL> select deptno,count(distinct(id1)) from
-
(select deptno,
-
(CASE length(id)
-
WHEN 18 THEN substr(id,1,6)||substr(id,9,9)
-
WHEN 15 THEN id
-
END) as id1
-
from t)
- group by deptno;
-
DEPTNO COUNT(DISTINCT(ID1))
-
---------- --------------------
-
1 2
-
2 1
- 3 1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29827284/viewspace-2138547/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle plsql case when_end case小記OracleSQL
- PLSQL Language Referenc-PL/SQL控制語句-條件選擇語句-搜尋CASESQL
- PLSQL Language Referenc-PL/SQL控制語句-條件選擇語句-簡單CASESQL
- plsql_case when_end case學習小例SQL
- 【開發篇sql】 條件和表示式(七) decode,case when,connect by 語句SQL
- MySQL條件判斷IF,CASE,IFNULL語句詳解MySqlNull
- MySQL 的CASE WHEN 語句使用說明MySql
- plsql_case when_if else endifSQL
- PL/SQL Case when應用SQL
- PLSQL Language Referenc-PL/SQL控制語句-條件選擇語句-IF THEN ELSeIFSQL
- PLSQL Language Referenc-PL/SQL控制語句-條件選擇語句-IF THEN ELSESQL
- PLSQL Language Referenc-4PL/SQL控制語句-條件選擇語句-IF THENSQL
- Oracle 條件索引 case when 報錯解決方案Oracle索引
- Swift學習筆記(二十七)——條件語句和Switch-case語句Swift筆記
- 條件語句
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-EXIT WHENSQL
- GO 條件語句Go
- javaScript條件語句JavaScript
- SQL語句case when外用sum與count的區別SQL
- PLSQL Language Referenc-PL/SQL控制語句-迴圈語句-CONTINUE WHENSQL
- sql case語法和plsql case語法!SQL
- 『忘了再學』Shell流程控制 — 35、多分支case條件語句
- where條件中使用case when來實現不同列的join
- Go:條件控制語句Go
- if條件語句sed命令
- 04.條件語句
- sql中case when的小學SQL
- Swift 條件語句講解Swift
- PL/SQL 條件控制語句SQL
- 學習Rust 條件語句Rust
- Python if else條件語句Python
- oracle中的條件語句Oracle
- 7、條件結構語句
- Python-條件語句和迴圈語句Python
- Python中if條件判斷語句怎麼用?Python
- ORACLE CASE WHEN 及 SELECT CASE WHEN的用法Oracle
- python-條件控制(if語句)Python
- 6. Oracle開發和應用—6.4. PL/SQL語法—6.4.4. 條件語句(分支語句)OracleSQL