2013-03-04 134 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