I'm executing below query in, but return duplicate rows when we do not have any records for "LastMonth" and "CurrentMonth". Please let me know where is the issue?
**Output:**
Project ProCount CurrentDateAvg thisWeekAvg thisMonthAvg lastMonthAvg
xyz 0 0 0.19 0.09 0
xyz 5 0 0.0 0.0 0
WITH
ThisWeek AS (SELECT 'xyz' as 'Project_Name', 0.19 as 'thisWeekAvg' ),
ThisMonth AS ( SELECT 'xyz' as 'Project_Name', 0.09 as 'thisMonthAvg'),
LastMonth AS( SELECT 'xyz' as 'Project_Name', 0 as 'lastMonthAvg' where 1=2),
CurrentDate AS( SELECT 'xyz' as 'Project_Name', 0 as 'CurrentDateAvg' where 1=2),
ProjectCount AS( SELECT 'xyz' as 'Project_Name', 5 AS 'ProCount' )
SELECT
COALESCE(w.Project_Name, m.Project_Name, l.Project_Name,c.Project_Name,pc.Project_Name) AS 'Project',
COALESCE(pc.ProCount,0) 'ProCount',
COALESCE(c.CurrentDateAvg,0) 'CurrentDateAvg',
COALESCE(w.thisWeekAvg,0) 'thisWeekAvg',
COALESCE(m.thisMonthAvg,0) 'thisMonthAvg',
COALESCE(l.lastMonthAvg,0) 'lastMonthAvg'
FROM
ThisWeek w
FULL OUTER JOIN ThisMonth m ON w.Project_Name = m.Project_Name
FULL OUTER JOIN LastMonth l ON m.Project_Name = l.Project_Name
FULL OUTER JOIN ProjectCount pc ON l.Project_Name = pc.Project_Name
FULL OUTER JOIN CurrentDate c ON pc.Project_Name = c.Project_Name
It's expected behavior because you aren't handling your
NULLvalues in yourJOINs.Let's number them for ease:
So we have:
JOINto This Month (no rowsJOINed)OINto Last Month (no rowsJOINed)JOINto no rows; creates a new row due toFULL OUTER JOIN.NULL <> 'xyz'For stuff like this you likely want an
IN: