2013-03-04 210 views
1

我無法弄清楚如何使用where子句創建多個選擇,以便爲我的名稱字段中的三個方案中的每一個都有一列。Mysql,爲多個值選擇相同的列,不同的條件

查詢我現在是:

SELECT 
    pd_extrafields.packetDetailsId, 
    pd_extrafields.ex_value as Credit 
    FROM 
    pd_extrafields 
    where pd_extrafields.ex_title = "Credit,A,B,C,D,E,F" 

我怎麼能拉其他兩列到相同的查詢符合下列條件(基本上我想這三個查詢合併成一個,並保持柱名):

SELECT 
    pd_extrafields.packetDetailsId, 
    pd_extrafields.ex_value as AccountNum 
    FROM 
    pd_extrafields 
    where pd_extrafields.ex_title = "Account#" 

&

SELECT 
    pd_extrafields.packetDetailsId, 
    pd_extrafields.ex_value as OrderStat 
    FROM 
    pd_extrafields 
    where pd_extrafields.ex_title = "New/Existing" 

回答

1

ü se CASE

select packetDetailsId, GROUP_CONCAT(Credit) AS Credit, GROUP_CONCAT(AccountNum) AS AccountNum, GROUP_CONCAT(OrderStat) AS OrderStat FROM 
(SELECT pd_extrafields.packetDetailsId, 
    CASE WHEN pd_extrafields.ex_title LIKE ('%Credit%') 
    THEN pd_extrafields.ex_value ELSE NULL END as Credit, 
    CASE WHEN pd_extrafields.ex_title LIKE ('%Account%') 
    THEN pd_extrafields.ex_value ELSE NULL END as AccountNum, 
    CASE WHEN pd_extrafields.ex_title LIKE ('%Existing%') 
    THEN pd_extrafields.ex_value ELSE NULL END as OrderStat 
    FROM pd_extrafields) AS TempTab GROUP BY packetDetailsId 
+0

謝謝Ravindra的快速回復。它幾乎可行,我得到一個錯誤,然後刪除「OrderStat」後的逗號似乎有幫助,但它不會返回該列的任何值。還有一種方法可以合併/分組,因此每個'packetDetailsId'結果出現在一行/每行上? – alex 2013-03-04 21:03:48

+0

謝謝指出。編輯我的查詢。我認爲它會顯示一行每包詳細信息ID,除非你在不同的行中具有相同的包詳細信息ID。不是嗎?你得到的輸出是什麼? – 2013-03-04 21:08:32

+0

這裏是一個鏈接到sql小提琴。 http://sqlfiddle.com/#!2/fa2a3/1也不包括OrderStat列的任何輸出。 – alex 2013-03-04 21:28:37

相關問題