2016-08-10 9 views
0

group byを使用して複数のテーブルから同じ日付の行のカウントをゲートしようとしていますが、結果の行に重複した日付が表示されます。私は日付の列から日付を削除する時間だけを表示するように日付形式を変更しました。私が正しく理解している場合、あなたは、単一のCOUNTSFULL OUTER JOIN必要両方のテーブルに値をカウントするので、グループを使用してグループ化された列の重複する日付

SELECT 
userprofiles."date", 
COUNT(userprofiles."date") AS NumberofRegistration, 
COUNT(CallScheduleTableFB."Date") AS NumberofCalls 
FROM userprofiles LEFT JOIN CallScheduleTableFB ON userprofiles."date" = CallScheduleTableFB."Date" 
GROUP BY userprofiles."date" 
UNION 
SELECT 
CallScheduleTableFB."Date", 
COUNT(userprofiles."date") AS NumberofRegistration, 
COUNT(CallScheduleTableFB."Date") AS NumberofCalls 
FROM userprofiles RIGHT JOIN CallScheduleTableFB ON userprofiles."date" = CallScheduleTableFB."Date" 
GROUP BY CallScheduleTableFB."Date" 

EDIT 後は、出力

userprofiles.date |NumberofRegistration |NumberofCalls 
27/07/2016 |1 |0 
28/07/2016 |0 |1 
28/07/2016 |0 |1 
28/07/2016 |0 |1 
28/07/2016 |0 |1 
30/07/2016 |0 |1 
30/07/2016 |0 |1 
03/08/2016 |1 |0 
03/08/2016 |1 |0 
03/08/2016 |0 |1 
03/08/2016 |0 |1 
+1

あなたは、出力データを提供することができますか? – Razzka

+0

サブクエリを使用し、すべてのコードをサブクエリに入れてから再度グループ化する必要があります。 –

+0

UNION演算子が原因です。とにかく、なぜ2つのCOUNT()がありますか? – Sach

答えて

1

@Sagar Galande、これは私の提案したコードです:

SELECT 
     A.[Date] 
    , SUM(A.NumberofRegistration) AS NumberofRegistration 
    , SUM(A.NumberofCalls) AS NumberofRegistration 
FROM 
    (
    SELECT 
     userprofiles."date" AS [Date], 
     COUNT(userprofiles."date") AS NumberofRegistration, 
     COUNT(CallScheduleTableFB."Date") AS NumberofCalls 
    FROM 
     userprofiles 
      LEFT JOIN 
     CallScheduleTableFB 
      ON userprofiles."date" = CallScheduleTableFB."Date" 
    GROUP BY 
     userprofiles."date" 
    UNION 
    SELECT 
     CallScheduleTableFB."Date" AS [Date], 
     COUNT(userprofiles."date") AS NumberofRegistration, 
     COUNT(CallScheduleTableFB."Date") AS NumberofCalls 
    FROM 
     userprofiles 
      RIGHT JOIN 
     CallScheduleTableFB 
      ON userprofiles."date" = CallScheduleTableFB."Date" 
    GROUP BY 
     CallScheduleTableFB."Date" 
    ) AS A 
GROUP BY 
    A.[Date] 
+0

答えにたくさんのTedo G.をありがとう。完全に細かい作業ソリューション。 –

1

です。そのよう

SELECT 
    COALESCE(A.date, B.Date), 
    COALESCE(A.NumberofRegistration, 0), 
    COALESCE(B.NumberofCalls, 0) 
FROM 
    (
     SELECT 
     userprofiles."date", 
     COUNT(userprofiles."date") AS NumberofRegistration 
     FROM userprofiles 
     GROUP BY userprofiles."date" 
    ) AS A 
    FULL OUTER JOIN 
    (
     SELECT 
     CallScheduleTableFB."Date", 
     COUNT(CallScheduleTableFB."Date") AS NumberofCalls 
     FROM CallScheduleTableFB 
     GROUP BY CallScheduleTableFB."Date" 
    ) AS B 
    ON A.date = B.Date 

COALESCEはちょうど提供のものの最初の非NULL値を返します。

+0

私の質問に間違いが見つかりました。今それは動作するはずです。お知らせ下さい! :) – GigiSan

+0

GIgiSanありがとうございました。クエリは完全にうまく動作しています –

+0

私は両方のソリューションを受け入れることを望みましたが、許可されていません。 –

関連する問題