I’m trying to convert a MS Access query into a SQL Sever stored procedure but having issue with summing and grouping fields from two unrelated tables. It’s possible to do it in MS Access, but I’m unable to replicate it in the SQL Server stored procedure.
Here’s the MS Access query I want to convert –
MS Access Query
SELECT Tbl_Actuals.PS
, [tbl_CalendarYear.Current_Year]-1 AS [Previous Year]
, tbl_CalendarYear.Current_Year
, Tbl_Actuals.Source
, Tbl_Actuals.Program_Code
, IIf([Source]="Leasehold",Sum(IIf([Actuals_Year]<>[Current_Year], ([Amount]),Null)),Null) AS PrevYearAmount
FROM Tbl_Actuals, tbl_CalendarYear
GROUP BY Tbl_Actuals.PS
, [tbl_CalendarYear.Current_Year]-1
, tbl_CalendarYear.Current_Year
, Tbl_Actuals.Source
, Tbl_Actuals.Program_Code
ORDER BY Tbl_Actuals.Program_Code;
Here’s the SQL Server stored procedure conversion for the above.
declare @CurrentYear float
declare @PrevYear float
SET @CurrentYear=(SELECT [Current_Year] FROM tbl_CalendarYear)
SET @PrevYear= (SELECT [Current_Year] -1 FROM tbl_CalendarYear)
SELECT PS
, @CurrentYear as CurrentYear
, @PrevYear as PreviousYear
, A.Source
, A.Program_Code
, CASE WHEN (A.Source='Leasehold') THEN SUM(A.Amount) -- HOW TO DO SUM ONLY IF [A.Actuals_Year]=[Current_Year] similar to Access Query END AS PrevYearAmount
FROM Tbl_Actuals A
GROUP BY PS
, Source
, Program_Code -- HOW TO GROUP BY [Current_Year]-1, tbl_CalendarYear.Current_Year similar to Access Query
ORDER BY Program_Code;
Here’s my questions with SQL conversion-
- HOW TO DO SUM ONLY IF
[A.Actuals_Year]=[Current_Year]similar to Access query - HOW TO GROUP BY
[Current_Year]-1, tbl_CalendarYear.Current_Yearsimilar to Access query
Kindly advise. Thank you.
It seems like a bit of a strange database design, but this may give you what you need:
Regarding question (2), since
@CurrentYearand@PrevYearare variables, you don’t need to group by them.I also notice that your Access query is summing
Amountwhere[Actuals_Year]<>[Current_Year]but in your question (1) you say it should sum where[Actuals_Year]=[Current_Year]. My answer follows the Access version.