当某些列具有不同的值时,将union all的结果合并为一行

时间:2014-01-24 02:23:23

标签: mysql sql

我正在使用union all来组合两个select语句的结果。我正在尝试按date_requested列对结果进行分组。如果日期相同,我需要将两个查询合并为一行。现在,它在同一个日期保留两行。这是因为tracking_id列在两行之间是不同的。由于我并不担心tracking_id,我怎么绕过它并将它们组合起来呢?感谢。

(select trv.requested_date, trv.requested_status
from  tbl_trackvalue as trv ,tbl_tracking as t , tbl_offers as off , tblusers as usr
where t.id=trv.tracking_id  and off.id=t.offer_id and  usr.id=trv.tr_user_id and usr.id='1454' 
and trv.payment_status='pending' and trv.requested_status='declined'  group by trv.tr_user_id, trv.requested_date order by trv.requested_date asc )
union all 
(select mlc.requested_date, mlc.requested_status
from  tbl_trackvalue as trv ,tbl_tracking as t , tbl_offers as off , tblusers as usr, tbl_mailchimp_trackvalue as mlc
where trv.tracking_id=mlc.tracking_id  and off.id=t.offer_id and  usr.id=trv.tr_user_id and usr.id='1454' 
and mlc.payment_status='pending' and mlc.requested_status='declined'  group by trv.tr_user_id, mlc.requested_date order by mlc.requested_date asc ) 

更新代码:

select requested_date, requested_status
from (select trv.requested_date as requested_date, trv.requested_status as requested_status
        from  tbl_trackvalue as trv ,tbl_tracking as trk , tbl_offers as off , tblusers as usr
        where trk.id=trv.tracking_id  and off.id=trk.offer_id and  usr.id=trv.tr_user_id and usr.id='1454' 
        and trv.payment_status='pending' and trv.requested_status='declined'  group by trv.requested_date asc 
        union all
        select mlc.requested_date as requested date, mlc.requested_status as requested_status
        from  tbl_trackvalue as trv ,tbl_tracking as trk , tbl_offers as off , tblusers as usr, tbl_mailchimp_trackvalue as mlc
        where trv.tracking_id=mlc.tracking_id  and off.id=trk.offer_id and  usr.id=trv.tr_user_id and usr.id='1454' 
        and mlc.payment_status='pending' and mlc.requested_status='declined'  group by mlc.requested_date asc ) t 
group by requested_date

UDPATE II:我从选择中删除了别名,似乎修复了语法错误。我会做更多测试,以确保它适用于各种情况。谢谢您的帮助。我不知道你不能为你的选择使用别名。

2 个答案:

答案 0 :(得分:1)

从子查询中删除tracking_id并使用union

(select trv.requested_date, trv.requested_status
from  tbl_trackvalue as trv, tbl_tracking as t , tbl_offers as off , tblusers as usr
where t.id=trv.tracking_id  and off.id=t.offer_id and  usr.id=trv.tr_user_id and usr.id='1454' 
and trv.payment_status='pending' and trv.requested_status='declined'  group by trv.tr_user_id, trv.requested_date order by trv.requested_date asc )
union
(select mlc.requested_date, mlc.requested_status
from  tbl_trackvalue as trv ,tbl_tracking as t , tbl_offers as off , tblusers as usr, tbl_mailchimp_trackvalue as mlc
where trv.tracking_id=mlc.tracking_id  and off.id=t.offer_id and  usr.id=trv.tr_user_id and usr.id='1454' 
and mlc.payment_status='pending' and mlc.requested_status='declined'  group by trv.tr_user_id, mlc.requested_date order by mlc.requested_date asc ) 

答案 1 :(得分:0)

如果除了tracking_id之外的行完全相同,只需将其从列表中删除,然后使用UNION代替UNION ALL。如果您还有其他差异,则可能希望在最终结果中使用GROUP BY,以便可以对其他不同的值使用聚合函数。