-1
我试图将MS Access查询转换为SQL Sever存储过程,但是存在两个无关表中的求和和分组字段的问题。它可以在MS Access中执行,但我无法在SQL Server存储过程中复制它。将访问查询转换为SQL Server存储过程
这里的MS Access查询我想转换 -
MS Access查询
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;
下面是上面的SQL Server存储过程的转换。
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;
这里是我的问题,与SQL转换 -
- HOW TO DO SUM ONLY IF
[A.Actuals_Year]=[Current_Year]
类似于Access查询 - HOW TO GROUP BY
[Current_Year]-1, tbl_CalendarYear.Current_Year
类似
请访问查询建议。谢谢。
为什么你将'Year'作为'FLOAT'存储?你能显示样本数据和期望的结果吗?我不确定我明白'GROUP BY SomeYear-1'的含义... –
当你已经用[Current_Year]分组时,为什么你需要通过'[Current_Year] -1'进行分组? –