我在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
请注意,我抓住了2014年3月13日的已批准请求,并添加了状态为待处理且其日期与已批准请求匹配的请求作为列。我一直在搞乱加入声明,并完成我的谷歌作业,但还没有找到办法做到这一点。
非常感谢任何想法。
答案 0 :(得分:1)
SELECT
GROUP_CONCAT('name` SEPARATOR ',') as NameList
FROM
`tablename`
GROUP BY
`date`
答案 1 :(得分: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')