2010-11-14 352 views
7

不知道sql語句可以在if/else語句中使用多遠。mysql如果其他語句

我有一個簡單的SELECT語句:

選擇amounttranstype FROM transactions

transtype列將是一個數字。

例如,1 =銷售,2 =退款,3 =錯誤,4 =取消,5 =其他....等等。

所以,沒有什麼複雜的。但由於報告的原因,名單往往會增加。這很好。

對於我正在處理的特定查詢,有沒有辦法將該列提取爲2個或3個指定的數字或文本之一?

例如,一些trannsype數字是「損失」,而另一些是「收益」,也可能是「中性」。

我想只提取那3列,而不使用PHP內部的HTML表格我扔行。

如果我的解釋不清楚,我的道歉。很難吐出來。

+0

您想將您的transtype值分類爲損失,收益或中性? – 2010-11-14 23:07:37

回答

3

使用MySQL CASE()功能。如果列表變大,則應使用第二個表並加入它們。

例子:

SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; 
2

嘗試連接另一個包含事務類型的表。喜歡的東西:

TRANSACTION_TYPES 
transtype | number 
label  | varchar(32) 

然後修改您的查詢,包括聯接:固定數量的參數

select t.amount, t.transtype, l.label 
    from transactions.t 
    join transaction_types l on t.transtype = l.transtype; 
+0

我正試圖遠離額外的桌子。我預計這種轉型增長超過10個數字。但你說得對,這是一個快速解決方案。 – coffeemonitor 2010-11-14 23:12:25

+0

它還將保留數據庫的關係完整性,以便您可以理解它,而無需通過特定查詢爲您「解釋」您的幻數。 – 2010-11-15 15:50:16

0

ELT功能應該做的伎倆:

SELECT ELT(`transtype`, 'loss', 'loss', 'gain', 'neutral', …) FROM … 

不是很優雅,雖然,邏輯上我會做這樣的觀點的邏輯,而不是數據庫邏輯。

0

您應該使用該列的ENUM type。它僅限於64個值,但如果您需要更多,則應該創建一個新表並在查詢中創建一個新表。