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