【问题标题】:MYSQL : Return rows if Dates not found in subqueryMYSQL:如果在子查询中找不到日期,则返回行
【发布时间】:2015-02-12 15:08:42
【问题描述】:

如果 taameer_pay_details 表中存在相应的按日期记录,则以下查询给出记录的输出。如果没有对应记录,则查询从fund_type_master隐藏基金名称

select Revenue as Revenue,
cur_date as Date,
rec_no as FirstRecNo,
Cash as cash, 
cheque as cheque, 
sum(Cash+ cheque) as Total
from (SELECT  
ft.fund_type as Revenue,STR_TO_DATE(tpd.paid_date,'%d-%m-%Y') as cur_date,tpd.rec_no as rec_no,sum(if(tpd.pay_mode='C',tpd.paid_amt,0)) as Cash,sum(if(tpd.pay_mode='DD',tpd.paid_amt,0)) as cheque
FROM taameer_details fd

JOIN taameer_pay_details tpd 
on tpd.tpay_id=fd.tamDet_id 
cross join fund_type_master ft 
on fd.fund_type =ft.fund_id
where TIMESTAMPDIFF(DAY , STR_TO_DATE(tpd.paid_date, '%d-%m-%Y') ,'2015-02-02') >=0  
AND TIMESTAMPDIFF(DAY ,'2015-01-01',STR_TO_DATE(tpd.paid_date, '%d-%m-%Y') ) >=0 
AND tpd.pay_type=2 
AND tpd.status=1 
group by ft.fund_id) a 
group by Revenue 

预期输出

Revenue         Date    FirstRecNo  cash    cheque  Total           
General Funds   2015-01-16  0       46100   7800    53900
Voluntary       2015-01-16  0       0       0       0
XYz             2015-01-16  0       0       0       0
Muv             2015-01-16  0       0       0       0
HMjwa           2015-01-16  0       0       900     900
NJUMz           2015-01-16  0       0       0       0
S Unit          2015-01-16  0       251     0       251

电流输出

Revenue         Date    FirstRecNo  cash    cheque  Total           
General Funds   2015-01-16  0       46100   7800    53900
NJUMz           2015-01-16  0       0       900     900
S Unit          2015-01-16  0       251     0       251

请帮我重新编写查询,以便按照预期结果输出数据。

【问题讨论】:

  • 对我来说,您希望如何将行分组在一起并不是很明显。也许您可以将其减少到一些 simple (but complete) example
  • 请分享表架构??

标签: mysql join inner-join


【解决方案1】:

尝试使用外连接:

FROM taameer_details fd 
LEFT OUTER JOIN taameer_pay_details tpd

您还应该在外连接的“on 子句”中包含连接表 taameer_pay_details 的所有条件:

FROM taamer_details fd
LEFT OUTER JOIN taameer_pay_details tpd
ON tpd.tpay_id=fd.tamDet_id
AND TIMESTAMPDIFF(DAY , STR_TO_DATE(tpd.paid_date, '%d-%m-%Y') ,'2015-02-02') >=0
AND ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多