I’m having trouble getting past this error. I’m using SQL Server 2017 (v14):
The multi-part identifier “PS_FFC.Date” could not be bound. The multi-part identifier “PS_FFC.Date: could not be bound. The multi-part identifier “PS_FFC.Employee ID” could not be bound.
Code:
x
SELECT
[Employee ID],
(SELECT SUM(Total) AS Expr1
FROM dbo.PS_FFC
WHERE (PS_FFC.Date >= DATEADD(DAY, 1, EOMONTH(GETDATE(), - 1)))
AND (PS_FFC.Date < GETDATE())
GROUP BY PS_FFC.[Employee ID]) AS Current_Month_FFCs,
(SELECT SUM(Total) AS Expr2
FROM dbo.PS_FFC AS PS_FFC_2
WHERE (PS_FFC.Date >= DATEADD(DAY, 1, EOMONTH(GETDATE(), - 2)))
AND (PS_FFC.Date < EOMONTH(GETDATE(), - 1))
GROUP BY PS_FFC.[Employee ID]) AS Prior_Month_FFCs
FROM
dbo.PS_FFC AS PS_FFC_1
The table I’m pulling from looks like:
Employee ID| Date| FFC
Emp000 1/1/2019 1
Emp000 1/2/2019 2
Emp000 12/31/2019 1
Emp001 1/3/2019 1
Emp003 1/20/2019 2
Emp004 2/5/2019 4
This what I’m hoping for the result to look like:
Employee ID| Current_Month_FFCs| Prior_Month_FFCs
Emp000 0 3
Emp001 0 1
Emp003 0 2
Emp004 4 0
Advertisement
Answer
Your second subquery is using the alias PS_FFC_2 for the table and you’re referencing as PS_FFC. The good thing is that you don’t need the subqueries for this and you can simply use a CASE expression to aggregate only the rows you need.
SELECT PS_FFC.[Employee ID],
SUM( CASE WHEN PS_FFC.Date >= DATEADD(DAY, 1, EOMONTH(GETDATE(), - 1)) AND PS_FFC.Date < GETDATE()
THEN PS_FFC.Total ELSE 0 END) AS Current_Month_FFCs,
SUM( CASE WHEN PS_FFC.Date >= DATEADD(DAY, 1, EOMONTH(GETDATE(), - 2)) AND PS_FFC.Date < DATEADD(DAY, 1, EOMONTH(GETDATE(), - 1))
THEN PS_FFC.Total ELSE 0 END) AS Prior_Month_FFCs
FROM dbo.PS_FFC AS PS_FFC
WHERE PS_FFC.Date >= DATEADD(DAY, 1, EOMONTH(GETDATE(), - 2))
AND PS_FFC.Date < GETDATE()
GROUP BY Employee_ID;