私はSQLの初心者で、指定された時間範囲と間隔を取得し、間隔でグループ化されたその時間範囲内のデータを返すことを目的としたストアドプロシージャを作成しています。たとえば、2週間の時間範囲と2日の間隔を入力すると、7つのデータポイントのパフォーマンスが得られます。
グループ化を行うために、間隔単位と日付部分のスイッチケースを使用して、グループ化のためにそれを抽出しています。ただし、私のプロシージャはコンパイルされません。これが私のコードです:
declare @interval int
declare @unit varchar(6)
set @interval=1
set @unit='year'
select
case @unit
when 'year' then datepart(year, CreateDate)/@interval*@interval
when 'month' then datepart(month, CreateDate)/@interval*@interval
when 'week' then datepart(week, CreateDate)/@interval*@interval
when 'day' then datepart(day, CreateDate)/@interval*@interval
when 'hour' then datepart(hour, CreateDate)/@interval*@interval
when 'minute' then datepart(minute, CreateDate)/@interval*@interval
when 'second' then datepart(second, CreateDate)/@interval*@interval
end
from OrderInfoCustom
group by
case @unit
when 'year' then datepart(year, CreateDate)/@interval
when 'month' then datepart(month, CreateDate)/@interval
when 'week' then datepart(week, CreateDate)/@interval
when 'day' then datepart(day, CreateDate)/@interval
when 'hour' then datepart(hour, CreateDate)/@interval
when 'minute' then datepart(minute, CreateDate)/@interval
when 'second' then datepart(second, CreateDate)/@interval
end
これはコンパイルを拒否し、このエラーを(複数回)与えます:
メッセージ8120、レベル16、状態1、行7の列'OrderInfoCustom.CreateDate'は、集計関数またはGROUP BY句のいずれにも含まれていないため、選択リストでは無効です。
コンパイラは、CreateDateがswitch-case内にあるため、集計関数の一部であることを認識していないようです。わからない。
編集:私はMicrosoft SQLServer2005を使用していることを含める必要があります。