我正在嘗試撰寫一個 SQL 腳本來顯示基于用戶引數的列。我在任何地方都找不到可接受的答案。
這是我想做的事情的簡化版本(在 OracleDB 中):
SELECT Table_car.purchase_date AS PurchaseDate,
Table_car.sale_date AS SaleDate,
CASE WHEN :userinput <> 999 THEN (SELECT Table_car.car_brand FROM Table_car WHERE Table_car.car_brand = :userinput )
ELSE (SELECT Table_car.car_brand FROM Table_car)
END AS CarBrand
FROM Table_car
我想要的偽代碼可能是
if(user_input = 999)
show_all_values_of(Table_car.car_brand );
else
show_only_some_values_of(Table_car.car_brand, user_input);
這是預期的結果:
if user_input <> 999 (if is 1, for example)
| PurchaseDate | SaleDate | CarBrand |
-------------- ------------ ----------
| 03/12/2018 | 09/10/2021 | 1 |
----------------------------------------
| 13/06/2011 | 20/11/2021 | 1 |
----------------------------------------
| 22/01/2020 | 09/12/2021 | 1 |
----------------------------------------
else (if user input is 999)
| PurchaseDate | SaleDate | CarBrand |
-------------- ------------ ----------
| 03/12/2018 | 09/10/2021 | 1 |
----------------------------------------
| 13/06/2001 | 20/11/2021 | 5 |
----------------------------------------
| 22/01/2020 | 09/12/2021 | 1 |
----------------------------------------
| 03/12/2018 | 09/10/2021 | 3 |
----------------------------------------
| 13/06/2012 | 10/10/2020 | 9 |
----------------------------------------
| 22/01/2020 | 09/12/2020 | 2 |
----------------------------------------
uj5u.com熱心網友回復:
您可以將邏輯放入where子句中,使用or; 就像是:
SELECT Table_car.purchase_date AS PurchaseDate,
Table_car.sale_date AS SaleDate,
Table_car.car_brand AS CarBrand
FROM Table_car
WHERE :userinput = 999 OR Table_car.car_brand = :userinput
如果您的列可以為空,您可能需要額外的邏輯以特定方式處理它,但它看起來不應該是這樣。如果您在 中需要其他條件where,請記住在上面的邏輯周圍加上括號,以確保它按照您的意圖進行解釋;IE
WHERE (:userinput = 999 OR Table_car.car_brand = :userinput)
AND ... something else
順便說一句,您可能需要考慮使用表別名來減少輸入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467507.html
標籤:sql 甲骨文 oracle-sqldeveloper
下一篇:案例類的去重串列
