SQL加入/合并/联盟基于日期的多个表

问题描述:

我有一个数据库,每个表中有一个日期,我想合并。我遇到的问题是,如果某个日期出现在一张表中,那么如果该日期不存在于其他表格中,则不会显示测量结果。SQL加入/合并/联盟基于日期的多个表

我想基于它们的Date和PersonID连接/合并两个SQL查询。

我有表A和B以及希望创建C.

谁能帮助?

+0

请仔细阅读http://meta.stackoverflow.com/questions/285551/why- may-i-not-upload-images-code-on-so-when-asked-a-question/285557 and the accepted answer –

+0

您正在使用哪些DBMS? Postgres的?甲骨文? DB2?火鸟? –

您也许能够做这样的事情,使用CTE和UNION ALL:

WITH tableC 
AS 
(


SELECT personID, 
    person, 
    datekey, 
    date, 
    SUM(sales) AS sales, 
    NULL AS costs 
FROM tableA 
GROUP BY personID, person, datekey, date 

UNION ALL 

SELECT personID, 
    person, 
    datekey, 
    date, 
    NULL, 
    SUM(costs) AS costs 
FROM tableB 
GROUP BY personID, person, datekey, date 

) 


SELECT personID, 
    person, 
    datekey, 
    date, 
    ISNULL(SUM(sales), 0) AS sales, 
    ISNULL(SUM(costs),0) AS costs 
FROM tableC 
GROUP BY personID, person, datekey, date 
ORDER BY datekey 
+0

这工作,谢谢VDK! – Sanguinus

+0

@Sanguinus很高兴我可以帮助:) – VDK

+0

标记wiki说:“标记为'SQL'的问题的答案应该使用ISO/IEC标准SQL” - 要符合标准,您需要将'NULL'更改为'CAST(NULL AS INTEGER)',并用双引号将保留字'date'转义为'“date”'。我也认为你需要用'COALESCE'替换'ISNULL'来保证正确的功能。 – onedaywhen