1. 程式人生 > >Oracle的Case語句

Oracle的Case語句

Oracle的CASE表示式

現在Oracle支援兩種CASE表示方式,一種Oracle稱為simple CASE(簡單形式),另外一種為searched CASE(查詢形式)。simple CASE相當於使用函式Decode,但是Case一般用於操作更為複雜的語句。CASE的形式更易於閱讀。

simple CASE的表示形式為:

CASE expr WHEN comparison_expr THEN return_expr
[, WHEN comparison_expr THEN return_expr]... [ELSE else_expr] END

*注:[]裡面的內容可以省略

執行方式為:

Oracle檢查表示式expr是否和表示式comparison_expr相等,如果相等則執行return_expr,否則執行ELSE else_expr的內容。

searched CASE表示形式為:

CASE WHEN condition THEN return_expr [, WHEN condition THEN return_expr]
   ... ELSE else_expr] END

 可以使用任何一種方式。

這兩種表示方式都是最多支援255個引數,其中每對When...Then算作2個引數。

例如:

1、

SELECT AVG(CASE when e.salary > 2000 THEN e.salary ELSE 2000 end)
  AS avg_sal_2k_floor
FROM employees e;
2、

SELECT AVG(CASE WHEN e.sal BETWEEN 0 AND 2000 THEN e.sal ELSE null END) avg2000,
    AVG(CASE WHEN e.sal BETWEEN 2001 AND 5000 THEN e.sal ELSE null END) avg5000
FROM emps e;

3、

SELECT SUM(CASE WHEN cust_credit_limit BETWEEN  0 AND 3999 THEN 1 ELSE 0 END)
  AS "0-3999",
SUM(CASE WHEN cust_credit_limit BETWEEN  4000 AND 7999 THEN 1 ELSE 0 END)
  AS "4000-7999",
SUM(CASE WHEN cust_credit_limit BETWEEN  8000 AND 11999 THEN 1 ELSE 0 END)
  AS "8000-11999",
SUM(CASE WHEN cust_credit_limit BETWEEN  12000 AND 16000 THEN 1 ELSE 0 END)
  AS "12000-16000"
FROM customers WHERE cust_city = 'Marshal';

    0-3999  4000-7999 8000-11999 12000-16000
---------- ---------- ---------- -----------
         8          7          7           1

4、

SELECT (CASE WHEN cust_credit_limit BETWEEN  0 AND 3999 THEN  ' 0 - 3999'
   WHEN cust_credit_limit BETWEEN  4000 AND 7999 THEN ' 4000 - 7999'
   WHEN cust_credit_limit BETWEEN  8000 AND 11999 THEN  ' 8000 - 11999'
   WHEN cust_credit_limit BETWEEN  12000 AND 16000 THEN '12000 - 16000' END)
  AS BUCKET, COUNT(*) AS Count_in_Group
FROM customers WHERE cust_city = 'Marshal' GROUP BY
 (CASE WHEN cust_credit_limit BETWEEN  0 AND 3999 THEN ' 0 - 3999'
 WHEN cust_credit_limit BETWEEN  4000 AND 7999 THEN ' 4000 - 7999'
 WHEN cust_credit_limit BETWEEN  8000 AND 11999 THEN  ' 8000 - 11999'
 WHEN cust_credit_limit BETWEEN  12000 AND 16000 THEN '12000 - 16000' END);

BUCKET        COUNT_IN_GROUP
------------- --------------
 0 - 3999                  8
 4000 - 7999               7
 8000 - 11999              7
12000 - 16000              1

相關推薦

python基礎:循環語句和判斷語句

python 語句 循環 判斷 小生博客:http://xsboke.blog.51cto.com 小生 Q Q:1770058260 -------謝謝您的參考,如有疑問,歡迎交流一、 python語句塊和縮進縮進是Py

常用SQL語句

char password 所有 gen 登錄 刪除表 一個 mysqldump pda --1. 用戶 --登錄 mysql -u用戶名 -p[密碼] --修改密碼 mysqladmin -u用戶名 -p[密碼] pa

mysql-不恰當的update語句使用主鍵和索引導致mysql死鎖

行修改 sql錯誤 狀態 還要 錯誤日誌 示意圖 http 概率 最小 背景知識:MySQL有三種鎖的級別:頁級、表級、行級。 MyISAM和MEMORY存儲引擎采用的是表級鎖(table-level locking);BDB存儲引擎采用的是頁面鎖(page-level l

語句收集

book mil only mov this words hang meet sap Journey of a thousand miles begins with a single step. Start each day with a positive thought.

Python 3 條件語句

too 講解 用戶 code 多條 代碼 admin ng2 logs 條件語句: 用於判定,判定是否符合某條件,符合則執行,不符合則不執行該條件所定義的操作。 一步判定: 用於理解不會這樣使用。   if 1==1: if條件判定只能出現一次。    pr

python——判斷、循環語句

生成 多重 一個 執行 判斷 列表 list 優秀 循環語句 簡單判斷語句:if… 一重判斷語句:if…else… 多重判斷語句:if elif else… Score=input(“請輸入你的分數”) Score=int(score) If score&

Sql語句——刪除表數據drop、truncate和delete的用法

行數據 const 數值 rain dml ble 可能 如果 sql語句 一、SQL中的語法 1、drop table 表名稱 eg: drop table dbo.Sys_Test 2、truncate tab

EF執行SQL語句 結果和直接在Sqlserver中執行結果不一致

enume 出了 text con query context png syn raw 先說問題 直接執行sql的結果 var result = base.Context.Customers.SqlQuery(sql);   sql 語句是打斷點取得的,連接的也

with ..do 簡化語句使用

ima col img class color 訪問 簡化 times mes 訪問對象的簡化語句可以用with; 通常訪問對象的屬性和方法需要在前面加上對象的名稱; 如: procedure TForm2.btn1Click(Sender: TObject); begi

從foreach語句枚舉元素看數組

屬性和方法 com image row lin turn throw 編譯 args 在foreach語句中使用枚舉,可以叠代數組或集合中的元素,且無須知道集合中的元素的個數。如圖顯示了調用foreach方法的客戶端和集合之間的關系。數組或集合實現帶GetEnumerato

步步為營-46-分頁顯示的SQL語句

pid right user http play 技術分享 isp class 多少 說明:分頁顯示在實際業務中經常需要用到,其SQL語句分兩種 --方法一:跳過多少行,選中多少行 --每頁n條,選擇第m頁--n=2 m=3 --select top(n) * from

NumberFormatException: Invalid int類型不匹配異常——使用SQL數據庫查詢語句select * from blacknumber order by _id desc limit ?,20;出現

rom add ray 修改 java turn 技術分享 data color 異常:類型不匹配 05-06 08:12:38.151: E/AndroidRuntime(14904): java.lang.NumberFormatException: Invalid i

java基礎-printf()語句的理解

style [] cnblogs ble bsp public line 天突 ont 對print和println的理解很簡單,今天突然接觸到printf(),有點懵,整理了下也幫自己理一理 printf是格式化輸出的形式 下在舉個例子: package o

SQL語句(二十一)—— 觸發器(DML觸發器)

cti lock dml set sql語句 事件 check約束 服務 expand 觸發器 一 、觸發器概述(特殊的存儲過程) 定義: 在修改指定表值的數據時執行的 存儲過程. 不同的是 : 執行存儲過程要使用EXEC語句來調用,而觸發器的執行不需要使用EX

linux之SQL語句簡明教程---主鍵,外來鍵

兩個 drop 表格 教程 ref double last http 舉例 主鍵 (Primary Key) 中的每一筆資料都是表格中的唯一值。換言之。它是用來獨一無二地確認一個表格中的每一行資料。主鍵能夠是原本資料內的一個欄位。或是一個人造欄位 (與原本資料沒有關系的

Java中如何拼接sql或者其他含有變量語句

java中如何拼接sql或者其他含有變量語句個人淺談Java拼接sql語句原則。本原則是個人感悟(不保證完全正確)第一條原則,首先將一條完整的字符串寫好。(例如是"select * from users where id=(id+1)")凡是變量都需要在其前面加上+,且前面是要加上",如果後面不是",則後面必

Oracle MERGE語句

oracle mergeMERGE語句,它可以在一個SQL語句中對一張表或一個視圖同時做更新或插入操作,避免了多個INSERT、UPDATE和DELETE語句。它可以從一個或多個數據源中選擇數據對目標表做更新或插入操作,你可以指定在何種條件下更新或插入目標表或視圖。不可以對同一行做多次更新操作。例如:實現用B

SQL 視圖 局部變量 全局變量 條件語句 事務 觸發器

tro break 服務器名稱 傳輸 回滾事務 觸發 n+1 exe 正在 一.視圖 1.視圖是一張虛擬表,他所存儲的不是實際數據,而是查詢語句,但我們可以對視圖進行像數據表一樣的操作。 2.為什麽使用視圖呢?我的理解是:1.在遠程傳輸數據時,可以避免過長的查詢字符,

通用刪除查詢語句存儲過程

conditionALTER PROCEDURE [dbo].[sp_deletetable] @tablename nvarchar(100), @condition nvarchar(500)ASBEGINDECLARE @Sql nvarchar(800)SET @Sql=‘delete from [

C語言中switch...case語句中break的重要性

不能 實現 比例 重要性 case語句 毫無 ... 應該 switch 在C語言中switch...case語句是經常用到的,下面我介紹一下在使用該語句時候需要註意的一個細節問題。話不多說,直接舉例子: 例子1: switch(fruit) { case 1:printf