参数:@Year int, @Month int
环境:SQL Server 2008 R2、Visual Studio
开发统计报告,根据所选月份和年份查找每种代码类型(约 50 多种类型)的 6 个月平均值。
因此,例如,如果选择 2012 年 2 月,则查询将在 2012 年 1 月、12 月/11 月/10 月/9 月/8 月 2011 年 12 月/11 月/10 月/9 月/8 月每次出现代码类型时计算,然后将该总和除以 6 以获得过去 6 个月的平均值。实际平均值是在 Visual Studio 的数据集中计算的。
SQL 代码如下所示:
CASE WHEN TypeCode = "xyz" and [Year] = (@Year - 1) and [Month] in (12, 11, 10,
9, 8, 7) then 1 else 0 end as TypeXYZ_Jan_Avg,
CASE WHEN TypeCode = "xyz" and (([Year] = (@Year ) and [Month] = 1) OR
([Year] = @Year and [Month] in (12, 11, 10, 9, 8))
then 1 else 0 end as TypeXYZ_Feb_Avg,
CASE WHEN TypeCode = "xyz" and ([Year] = @Year and [Month] in (11, 10, 9, 8, 7,
6)) then 1 else 0 end as TypeXYZ_Dec_Avg
这是针对每 50 多种代码类型完成的。
我需要保留此函数中的其他字段(此处未提及)。无论如何,最终查询超出了允许的最大列数。
我试图通过将代码类型作为参数来最小化字段数量。
像这样的东西:
CASE WHEN TypeCode = @CodeType and ([Year] = @Year and [Month] in (11, 10, 9,
8, 7, 6)) then 1 else 0 end as Type_Dec_Avg
但是,当我在函数中声明@CodeType
参数时,这不起作用(因为我在 VS 中遇到多值错误):
SELECT * FROM CodeTypes(@CodeType, @Year, @Month)
值已传递,但计算已关闭:
SELECT * FROM CodeTypes(@Year, @Month) WHERE CodeType in (@CodeType)
有什么建议么?也许做一个临时表?我不太熟悉如何做到这一点,但我计划现在做一些研究。
谢谢。