Oracle的條件表達式通常使用Case When語句實現。Case When語句允許我們對一個值進行多層判斷,從而根據不同條件返回不同結果。它是SQL的一種靈活和有力的工具,提供了在查詢中動態計算和轉換數據的能力。下面我們來看一些Case When語句的實際應用。
最基本的Case When語句是單層的,它包含一條起始條件和一個在條件成立時要執行的語句。例如:
SELECT CASE gender WHEN 'M' THEN 'Male' ELSE 'Female' END FROM employees;
這個例子中,我們對性別進行判斷,如果性別為'M',則返回'Male',否則返回'Female'。
我們也可以使用多個條件嵌套的語句來實現更復雜的邏輯。例如:
SELECT CASE WHEN salary >10000 AND salary<= 20000 THEN 'Level 1' WHEN salary >20000 AND salary<= 30000 THEN 'Level 2' WHEN salary >30000 AND salary<= 40000 THEN 'Level 3' ELSE 'Level 4' END FROM employees;
這個例子中,我們對工資進行判斷,如果工資在10000到20000之間,則返回'Level 1',如果在20000到30000之間,則返回'Level 2',如果在30000到40000之間,則返回'Level 3',否則返回'Level 4'。
在判斷條件中,我們也可以使用邏輯運算符來結合多個條件。例如:
SELECT CASE WHEN gender = 'M' AND age >= 18 THEN 'Male Adult' WHEN gender = 'M' AND age< 18 THEN 'Male Child' WHEN gender = 'F' AND age >= 18 THEN 'Female Adult' ELSE 'Female Child' END FROM employees;
這個例子中,我們對性別和年齡進行判斷,如果性別為'M'且年齡大于等于18歲,則返回'Male Adult',如果性別為'M'且年齡小于18歲,則返回'Male Child',如果性別為'F'且年齡大于等于18歲,則返回'Female Adult',否則返回'Female Child'。
有時候,我們需要對多個列進行判斷并返回相應結果,這時候可以使用混合式的Case When語句。例如:
SELECT CASE WHEN salary >40000 THEN 'High Salary' ELSE CASE WHEN gender = 'M' THEN 'Male' ELSE 'Female' END END FROM employees;
這個例子中,我們如果工資大于40000,則返回'High Salary',否則會再對性別進行判斷,如果為'M',則返回'Male',否則返回'Female'。
最后,我們還可以在Case When語句中使用聚合函數。例如:
SELECT SUM( CASE WHEN gender = 'M' THEN salary ELSE 0 END ) AS TotalSalaryForMale FROM employees;
這個例子中,我們統計所有男性員工的總工資。我們先對每個員工進行判斷,如果性別為'M',則返回該員工的工資,否則返回0。然后在最外層調用SUM函數進行求和。
總之,Case When語句是一種非常靈活和強大的工具,用來幫助我們在查詢時實現各種邏輯判斷和數據轉換。無論是單層還是多層嵌套的語句,都可以通過合理的組合和運用,實現我們想要的各種復雜場景。