SQL Server 2008 を使用しており、ユーザーの選択に応じて一時テーブルを作成しようとしています。
declare @x nvarchar(max), @mgchk int, @sgchk int, @ssgchk int, @seasonchk int, @vendorchk int, @storeid varchar(10), @trsfrom date, @trsto date
set @trsfrom = '1/1/12'
set @trsto = '1/1/13'
set @mgchk = 1
set @sgchk = 1
set @ssgchk = 1
set @seasonchk = 1
set @vendorchk = 1
set @x = 'create table ##aa ('
if @mgchk = 1
set @x = @x + 'MainGroup varchar(20),'
if @sgchk = 1
set @x = @x + 'SubGroup varchar(20),'
if @ssgchk = 1
set @x = @x + 'SubSubGroup varchar(20),'
if @seasonchk = 1
set @x = @x + 'Season varchar(20),'
if @vendorchk = 1
set @x = @x + 'VendorID varchar(20),'
declare storecr Cursor scroll for
select distinct storeid from RPTrs where TRSDate between @trsfrom and @trsto
open storecr
fetch next from storecr
into @storeid
while @@FETCH_STATUS = 0 begin
set @x = @x + @storeid + ' decimal(15,2),'
fetch next from storecr
into @storeid
end
close storecr
deallocate storecr
set @x = @x + 'Total decimal(15,2))'
execute sp_executesql @x
select * from ##aa
ただし、実行するとこれらのエラーが発生します。
メッセージ 102、レベル 15、状態 1、行 1
'01' 付近の構文が正しくありません。
メッセージ 208、レベル 16、状態 0、行 47
無効なオブジェクト名 '##aa'。
最終的な出力は、@trsfrom と @trsto の日付範囲の間に取引を行った店舗の数に基づいている必要があります。その間に 3 つの店舗が売上を上げた場合、探している結果は次のようになります (01、02、および 03 は店舗名です)。
MainGroup | SubGroup | SubSubGroup | Season | Vendor | 01 | 02 | 03 | Total
----------------------------------------------------------------------------
| | | | | | | |
それが問題である場合、RPTrs の StoreID フィールドは varchar(5) です。ただし、店舗の列には、日付範囲内の売上高が表示されます。