我有兩個表如
LEFT JOIN第三表到原來的表,而不是將所得表
- 收入(點,日期,INC)
- 結果(點,日期,下)
其中點和日期是主鍵。
我需要找出任何給定日期的總收入inc
和結果out
。 我的回答
WITH all_date AS
(SELECT point, date FROM income
UNION
SELECT point, date FROM outcome)
SELECT a.point, a.date, SUM(inc), SUM(out)
FROM all_date a LEFT JOIN income i ON i.point=a.point AND i.date=d.date
LEFT JOIN outcome o ON o.point=a.point AND o.date=a.date
GROUP BY a.point, a.date
但是我得到錯誤的結果。因爲all_date LEFT JOIN income
試圖做LEFT JOIN
與outcome
重複從income
某些行,因此搞亂最後SUM
。
基本上我想LEFT JOIN
第三個表outcome
與all_date
與all_date LEFT JOIN income
沒有。請參閱QUS否http://www.sql-ex.ru/learn_exercises.php 30.進一步澄清
單向外連接將跳過一側的行。 –
@LONG在你的查詢中,你將丟棄右表'結果'中的行,它在左表'收入'中沒有匹配。爲了獲得所有'point-date',我使用了CTE –
我看到了,如果你只想過濾掉那些常見的日期,那就使用'INNER JOIN'。只需在我的答案中將'LEFT JOIN'改爲'INNER JOIN'即可。根據你的評論,我猜你不想錯過任何日期,無論是否存在'inc'和'out',然後嘗試:SELECT i.point,i.date,SUM(ISNULL(i.inc ,0)),SUM(ISNULL(o.out,0)) FROM income i FULL JOIN結果o ON o.point = i.point AND o.date = i.date GROUP BY i.point,i .date – LONG