如何格式化查询

时间:2015-08-13 03:36:12

标签: mysql sql

我遇到了一个我写过的查询的问题。它首先计算以下值,然后将按da_no分组的每个求和放入一个单独的临时表中。

目标 目标平衡 软承诺 软质押余额 硬承诺 硬抵押余额 提高到目前为止

出于某种原因,我无法弄清楚如何格式化查询,以便无论临时表是否为空,都会给出结果。我注意到如果我重新排序连接,查询会产生一个结果,但如果填充了任何列,我需要一个结果。

示例一:什么都不产生

SELECT
COALESCE(Goal, 0.00) AS 'Goal',
COALESCE((Goal - RaisedToDate),0.00) AS 'GoalBalnce',
COALESCE(SoftPledge,0.00) AS SoftPledge,
COALESCE(SoftPledgeBalance,0.00) AS SoftPledgeBalance,
COALESCE(HardPledge,0.00) AS HardPledge,
COALESCE(HardlePledgeBalance,0.00) AS HardlePledgeBalance,
COALESCE(RaisedToDate,0.00) AS 'RaisedToDate',
da.da_no, TG.da_no
FROM
donations_accounts da
JOIN TEMP_GOAL TG on da.da_no = TG.da_no
JOIN TEMP_RAISED_TO_DATE TRTD ON da.da_no = TRTD.da_no
JOIN TEMP_HARD_PLEDGE_BALANCE THPB ON da.da_no = THPB.da_no
JOIN TEMP_SOFT_PLEDGE_BALANCE TSPB ON da.da_no = TSPB.da_no
JOIN TEMP_HARD_PLEDGE THP on da.da_no = THP.da_no;

示例二:YIELDS ONE RECORD

SELECT
COALESCE(Goal, 0.00) AS 'Goal',
COALESCE((Goal - RaisedToDate),0.00) AS 'GoalBalnce',
COALESCE(SoftPledge,0.00) AS SoftPledge,
COALESCE(SoftPledgeBalance,0.00) AS SoftPledgeBalance,
COALESCE(HardPledge,0.00) AS HardPledge,
COALESCE(HardlePledgeBalance,0.00) AS HardlePledgeBalance,
COALESCE(RaisedToDate,0.00) AS 'RaisedToDate',
  da.da_no
FROM
donations_accounts da
JOIN TEMP_HARD_PLEDGE THP on da.da_no = THP.da_no
LEFT JOIN TEMP_GOAL TG on da.da_no = TG.da_no
LEFT JOIN TEMP_RAISED_TO_DATE TRTD ON da.da_no = TRTD.da_no
LEFT JOIN TEMP_HARD_PLEDGE_BALANCE THPB ON da.da_no = THPB.da_no
LEFT JOIN TEMP_SOFT_PLEDGE_BALANCE TSPB ON da.da_no = TSPB.da_no;

目标,GoalBalnce,SoftPledge,SoftPledgeBalance,HardPledge,HardlePledgeBalance,RaisedToDate,da_no

0.00,0.00,0.00,0.00,0.55.00,0.00,0.00,2352

主要问题是我不知道哪个临时表会有一个值,哪一个不会因此很难确定左表连接的时候。如果有其他方法可以编写此脚本以获取正确的结果集,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:0)

select 
COALESCE(Goal, 0.00) AS 'Goal',
COALESCE((Goal - RaisedToDate),0.00) AS 'GoalBalnce',
COALESCE(SoftPledge,0.00) AS SoftPledge,
COALESCE(SoftPledge - SoftRaised, 0.00) AS 'SoftPledgeBalance',
COALESCE(HardPledge,0.00) AS HardPledge,
COALESCE(HardPledge - HardRaised,0.00) AS HardlePledgeBalance,
COALESCE(RaisedToDate,0.00) AS 'RaisedToDate',
da.da_no
from donations_accounts da


LEFT JOIN (SELECT COALESCE(SUM(pl_debit), 0.00) AS 'HardPledge', pl.da_no FROM pledges pl WHERE pl_status = 1 AND pl.e_no = 22386 GROUP BY da_no) H on H.da_no = da.da_no
LEFT JOIN (SELECT COALESCE(SUM(eg_goal), 0.00) AS 'Goal', da_no FROM events_goals WHERE e_no = 22386 GROUP BY da_no) g on g.da_no = da.da_no
LEFT JOIN (SELECT COALESCE(SUM(disb_amount), 0.00) AS 'RaisedToDate', da_no FROM disbursements d LEFT JOIN contacts c ON d.c_no = c.c_no WHERE d.disb_status = 1 and c.c_status = 1 AND e_no = 22386 GROUP BY da_no) R on R.da_no = da.da_no
LEFT JOIN (SELECT COALESCE(SUM(sp.sp_softpledge), 0.00) 'SoftPledge', sp.da_no FROM soft_pledges sp JOIN events_cohosts ec ON sp.ec_no = ec.ec_no LEFT JOIN contacts c on ec.c_no = c.c_no WHERE sp.da_no IS NOT NULL AND ec.ec_status = 1 AND sp_status = 1 AND c_status = 1 AND e_no = 22386 GROUP BY da_no) s on s.da_no = da.da_no
LEFT JOIN (SELECT COALESCE(SUM(disb_amount), 0.00) AS 'SoftRaised', d.da_no FROM disbursements d WHERE disb_status = 1 AND b_no IS NOT NULL AND b_no <> 0 AND e_no = 22386 GROUP BY da_no) sb on sb.da_no = da.da_no
LEFT JOIN (SELECT COALESCE(SUM(disb_amount), 0.00) AS 'HardRaised',pl.da_no FROM pledges pl JOIN disbursements d ON d.c_no = pl.c_no  WHERE pl_status = 1 AND d.disb_status = 1 AND pl.e_no = 22386 AND d.e_no = 22386 GROUP BY da_no) hb on hb.da_no = da.da_no

where 
(HardPledge > 0.00 
or Goal > 0.00 
or RaisedToDate > 0.00 
or HardRaised > 0.00
or SoftPledge > 0.00
or SoftRaised > 0.00);