パラメーター:@Year int, @Month int
環境: SQL Server 2008 R2、Visual Studio
選択した月と年に応じて、各コード タイプ (約 50 以上のタイプ) の 6 か月の平均を見つけるための統計レポートを作成します。
たとえば、2012 年 2 月を選択すると、2012 年 1 月、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)
助言がありますか?たぶん、一時テーブルを作成しますか?私はこれを行う方法にあまり慣れていませんが、今いくつかの研究を行う予定です。
ありがとう。