中選擇語句我想知道是否有可能編寫一個sql查詢返回一組基於條件的列。如果否則在Oracle sql developer
例如像:
If (id=='A')
{
Select id,name
From Table A
}
Else If(Condition=B)
{
Select Column1, Column3
From Table A
}
如果是,請幫我寫它
中選擇語句我想知道是否有可能編寫一個sql查詢返回一組基於條件的列。如果否則在Oracle sql developer
例如像:
If (id=='A')
{
Select id,name
From Table A
}
Else If(Condition=B)
{
Select Column1, Column3
From Table A
}
如果是,請幫我寫它
語法(IF-THEN-ELSE)
的語法是IF-THEN-ELSE甲骨文/ PLSQL是:
IF condition THEN
{...statements to execute when condition is TRUE...}
ELSE
{...statements to execute when condition is FALSE...}
END IF;
您可以在普通SQL中使用CASE
表達式做類似switch的語句。請參閱以下example:
SELECT some_other_field,
id,
CASE ID
WHEN A THEN columnA
WHEN B THEN columnB
ELSE 'Unknown'
END genericvalue
FROM customers;
當然也有一定的侷限性。例如,THEN子句中返回值的類型需要匹配,因此您可能需要將所有轉換爲char或int等。
SQL本身並不完整,它不會完成沒有循環和條件的語法:無論它有多複雜,您都可以使用它執行查詢,但無法根據條件決定執行哪個查詢或執行多次查詢,這就是你正試圖在這裏做。
爲了提供這樣的功能,每個數據庫開發人員通常會提供一個額外的語言,包括變量聲明,循環,條件等等。對於Oracle,這種語言是PL/SQL。
你需要在SQL Developer中如何解決您的問題,看看PL/SQL是如何工作的是創建一個空的腳本,然後寫是這樣的:
--Enabling output to the console
SET SERVEROUTPUT ON;
DECLARE
--Variable declaration block; can initialize variables here too
test_var varchar2(10);
test_result varchar2(10);
BEGIN
--Initializing variables, the first one we will check in the IF statement, the second one is just for transparency
test_var := 'test';
test_result := '';
--IF block: check some condition, perform a select based on the value, save result into a variable
IF test_var = 'test' THEN
SELECT '1' INTO test_result FROM dual;
ELSE
SELECT '2' INTO test_result FROM dual;
END IF;
--Output the result to console
DBMS_OUTPUT.PUT_LINE(test_result);
END;
然後用「運行腳本」運行/ F5。你會得到'1'作爲你所期望的輸出。將test_var更改爲其他內容並再次運行,您將得到'2'。
如果您有這類問題,請閱讀有關SQL和PL/SQL的具體內容。 PL/SQL非常高效且通用,可用於從自動SQL腳本到實現複雜優化算法的任何事情。
當然,PL/SQL具有用於類似的結構和while循環,例檢查等
我想這是你在找什麼。
即使使用CASE和DECODE,也無法在SQL中做這樣的選擇。
但是我們可以做的最好的是我們可以創建一個函數,它返回一個ref_cursor並在SQL實例中使用函數來滿足您的需求。
下面是一個例子吧:
CREATE OR REPLACE
FUNCTION test1(
id1 VARCHAR)
RETURN sys_refcursor
AS
v_ref sys_refcursor;
BEGIN
IF(id1='A') THEN
OPEN v_ref FOR SELECT id,name FROM TABLE A;
ElsIf(id1='B') THEN
OPEN v_ref FOR SELECT Column1, Column3 FROM TABLE A;
END IF;
RETURN v_ref;
END;
select test1(A) from dual;
上面會顯示僅列編號和名稱。
沒有這不可能在SQL中,您需要使用PL/SQL(可能還有動態SQL)。你比較的'id'的值是從哪裏來的? –