簡體   English   中英

如何在SQL select語句中添加if或case

[英]How to add if else or case in SQL select statement

這是我的SQL查詢,用於從表order和user_master中獲取數據

String str = "select od.total, od.invoice_link, od.status, ";
str += "od.order_type, um.name as sender_name, umr.name as receiver_name, ";
str += "umr.twitter_handle as receiver_twitter_handle, um.twitter_handle as sender_twitter_handle ";
str += "from orders od ";
str += "join user_master um on um.id = od.user_id ";
str += "join user_master umr on umr.id = od.receiver_id ";
str += "where user_id = '"+user_id+"' ";

String json = dao.getResultJSON(str);
return json;

在數據庫中有一個名為order_type的列,其中包含轉帳,請求和發票之類的值。如果order_type列中的值為“轉帳”,則需要將“付款至”返回到變量json中;如果該值是“從...請求”列中的是“ request”。只需忘掉我上面提到的“發票”即可。這兩個對我的預期輸出就足夠了。

無論如何要先謝謝

在不知道payment_torequested_from應該來自哪里的情況下,這就像在黑暗中拍攝的那樣:

select 
    od.total
  , od.invoice_link
  , od.status
  , od.order_type
  , um.name as sender_name
  , umr.name as receiver_name
  , um.twitter_handle as sender_twitter_handle 
  , umr.twitter_handle as receiver_twitter_handle
  , case when od.order_type = 'transfer' then od.payment_to else null end as payment_to 
  , case when od.order_type = 'request' then od.requested_from else null end as requested_from
  from orders od 
    inner join user_master um on um.id = od.user_id 
    inner join user_master umr on umr.id = od.receiver_id 
  where user_id = '"+user_id+"' 

以您發布的格式:

String str = "select";
str += "    od.total";
str += "  , od.invoice_link";
str += "  , od.status";
str += "  , od.order_type";
str += "  , um.name as sender_name";
str += "  , umr.name as receiver_name";
str += "  , um.twitter_handle as sender_twitter_handle ";
str += "  , umr.twitter_handle as receiver_twitter_handle";
str += "  , case when od.order_type = 'transfer' then od.payment_to else null end as payment_to";
str += "  , case when od.order_type = 'request' then od.requested_from else null end as requested_from";
str += "  from orders od ";
str += "    inner join user_master um on um.id = od.user_id ";
str += "    inner join user_master umr on umr.id = od.receiver_id ";
str += "  where user_id = '"+user_id+"';";

String json = dao.getResultJSON(str);
return json;
select od.total, 
       od.invoice_link, od.status,
       od.order_type,
       um.name as sender_name, umr.name as receiver_name,
       umr.twitter_handle as receiver_twitter_handle, 
       um.twitter_handle as sender_twitter_handle 
  from orders od 
  join user_master um on um.id = od.user_id 
  join user_master umr on umr.id = od.receiver_id 
  where user_id = SOMETHING 

是從看起來像Java剖析出來的SQL查詢。 您應該了解SQL在表中進行交易; 也就是說,它處理充滿數據的矩形。 每個結果集返回一系列行。 結果集中的每一行必須與其他行具有相同的列。

您要查詢兩種不同的行,一種行帶有“ Payment to列,另一行帶有“ Requested from列。 行的選擇取決於行中的某些數據。 這不會在單個查詢中發生。

不過,您可以執行類似的操作。

select 
 ...,
 CASE WHEN od.order_type='transfer' THEN receiver_twitter_handle ELSE '' END `Payment to`,
 CASE WHEN od.order_type='request' THEN sender_twitter_handle ELSE '' END `Requested from`,
 ...

這將在結果集的每一行中生成所需的兩列。 無關時,一列或兩列將包含空格。

這些CASE語句的詳細信息可能因表服務器的不同而有所不同,並且您尚未公開使用的是哪個服務器,因此此處可能有誤。 但是您可以修復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM