【发布时间】:2015-08-13 03:36:12
【问题描述】:
我写的查询有问题。它首先计算以下值并将按 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;
示例二:产生一个记录
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;
目标、GoalBalance、SoftPledge、SoftPledgeBalance、HardPledge、HardlePledgeBalance、RaisedToDate、da_no
0.00, 0.00, 0.00, 0.00, 5000.00, 0.00, 0.00, 2352
主要问题是我不知道哪个临时表中会有值,哪个没有,因此很难确定要从哪个表离开连接。请让我知道是否有另一种方法可以编写此脚本以获得正确的结果集。谢谢!
【问题讨论】:
-
为什么不全部使用
LEFT JOIN? -
我们在一些
conditional joins和left joins上磕磕绊绊,似乎是路线。 -
当我使用 LEFT JOIN 时,它会显示单个 da_no,我尝试限制大于 0.00,但由于某种原因,它不会将其识别为 0.00 或 null
-
@drew 我应该只是一个“条件连接”吗?
-
当然每个人都不一样,但请查看answer的第 3、4、5 行