0

我在 MySQL 中有一个如下所示的表:

date      | name    | status
03-13-2014,Bob Jones,Pending
03-13-2014,George Manuel,Pending
03-13-2014,Tom Grables,Pending
03-13-2014,Frankie Avalon,Approved
03-13-2014,Robert Garcia,Approved
03-14-2014,John Doe,Pending
03-14-2014,John Die,Approved
03-14-2014,John Zoe,Approved

我要做的是获取所有表示已批准的行的日期、名称和状态。但是,我还想以这样一种方式加入此查询,即我抓取的每一行还有一个分号分隔的列表,其中包含状态为待处理且与已批准同一天的人的姓名。因此,我的查询的输出将如下所示:

03-13-2014,Frankie Avalon,Approved,Bob Jones;George Manuel;Tom Grables
03-13-2014,Robert Garcia,Approved,Bob Jones;George Manuel;Tom Grables

请注意,我抓取了 03-13-2014 的已批准请求,并将状态为待处理且日期与已批准请求匹配的请求添加为列。我一直在搞砸加入声明,并完成了我的谷歌作业,但还没有找到一种方法来做到这一点。

任何想法将不胜感激。

4

2 回答 2

1

调查group_concat()

SELECT
    GROUP_CONCAT('name` SEPARATOR ',') as NameList
FROM
    `tablename`
GROUP BY
    `date`
于 2013-04-02T15:34:30.173 回答
1

我认为这是您想要的逻辑:

 select `date`,
         group_concat( (case when status = 'Approved' then name end) separator ';') as Approveds,
         group_concat( (case when status = 'Pending' then name end) separator ';') as Pendings
 from t
 group by `date`;

如果您确实希望在没有批准的日期等待,那么您需要一个额外的过滤器:

 select `date`,
         group_concat( (case when status = 'Approved' then name end) separator ';') as Approveds,
         group_concat( (case when status = 'Pending' then name end) separator ';') as Pendings
 from t
 group by `date`
 having `date` in (select `date` from t where status = 'Approved')
于 2013-04-02T15:41:04.273 回答