[英]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_to
和requested_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.