2017-04-24 11 views
1

私は結合したい各テーブルにDateを持つデータベースを持っています。私が持っている問題は、1つのテーブルに1つの日付が存在する場合に、その日付が他のテーブルに存在しない場合に指標を表示しないことです。SQL Join/Merge/Union日付に基づく複数のテーブル

DateとPersonIDに基づいて2つのSQLクエリを結合/マージしようとしています。

私は表AとBを持っているとC.

を作成したい、誰が助けることはできますか?

+0

http://meta.stackoverflow.com/questions/285551/why-をお読みください私がアップロードしていない画像のコードを285557と受け入れた回答 –

+0

どのDBMSを使用していますか? Postgres?オラクル? DB2?ファイアバード? –

答えて

0

あなたは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 "'としてエスケープします。また、正しい機能を保証するために 'ISNULL'を' COALESCE'に置き換える必要があると思います。 – onedaywhen

関連する問題