
SQLserverでのクロス集計についてご質問ですが、
クロス集計後の結果、列を動的に変更させる必要がある場合、ストアドプロシージャで処理しなければならないかとは思うのですが、
例えば
T_売上
番号,日付,数
1,2004/09/10,10
1,2004/09/14,20
1,2004/09/18,10
2,2004/09/10,20
2,2004/09/14,20
3,2004/09/18,10
を
番号,2004/09/10,2004/09/14,2004/09/18
1,10,20,10
2,20,20,0
3,0,0,10
という形に出力したいときは、具体的にどういう手順でSSQLを作成していけばよろしいでしょうか。
(日付部分が動的に増えたり減ったりします)

No.1ベストアンサー
- 回答日時:
declare @sql1 varchar(8000)
declare @sql2 varchar(8000)
declare @i int
declare @fld1 varchar(20)
declare @fld2 varchar(20)
declare @fldx varchar(20)
select @sql1='select T売上.番号'
select @sql2=''
select @fld1='日付'
select @fld2='数'
select @i=0
declare fld_lst cursor for
select distinct convert(varchar,日付,111) as 日付 from T売上 order by 日付
open fld_lst
while @i<100
begin
fetch next from fld_lst into @fldx
if @@fetch_status<>0 break
set @sql1=@sql1+',sum(case when '+convert(varchar,@fld1,111)+'='''+@fldx
+''' then '+@fld2+' else 0 end) as ['+@fldx+']'
set @i=@i+1
end
if @@fetch_status=0
while 1=1
begin
fetch next from fld_lst into @fldx
if @@fetch_status<>0 break
set @sql2=@sql2+',sum(case when '+convert(varchar,@fld1,111)+'='''+@fldx
+''' then '+@fld2+' else 0 end) as ['+@fldx+']'
end
close fld_lst
deallocate fld_lst
exec(@sql1+@sql2+' from T売上'
+' group by T売上.番号 order by T売上.番号')
return
以上でできるはずでは。
この回答への補足
再度すみません。
このプロシージャの結果を別のプロシージャで取得したい場合、テンプレートテーブルを使って渡すことになるのでしょうか?
それともそれ以外になにか方法はありますでしょうか。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLサーバでの和暦(int)→西暦へ...
-
VBAのAccessでDATE型のINSERT
-
SQLで特定の項目の重複のみを排...
-
外部参照してるキーを主キーに...
-
フィルターかけた後、重複を除...
-
差し込み後、元データを変更し...
-
SQLで列名を変数にできないでし...
-
エクセルで最後の文字だけ置き...
-
カーソル0件の時にエラーを発生...
-
SELECT 文 GROUP での1件目を...
-
JANコードとPOSコードは同じ?
-
select文の書き方「半角カナ+...
-
EXISTSを使ったDELETE文
-
Access パラメータクエリをcsv...
-
access2021 VBA メソッドまたは...
-
COBOLの文法
-
VIEWの元のテーブルのindexって...
-
UPDATE文のWHERE条件に他のテー...
-
datetime型でNULL値を入れたい。
-
顧客データベースを作る場合、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのAccessでDATE型のINSERT
-
クロス集計で、列を動的に
-
SQLサーバでの和暦(int)→西暦へ...
-
MS-SQL datetime型から日付だけ...
-
SQL Server 2005 Expressを利用...
-
変数に昨日の日付を入力したい
-
nvarcharとdatetimeで作成され...
-
フィルターかけた後、重複を除...
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
エクセルで最後の文字だけ置き...
-
SQLで特定の項目の重複のみを排...
-
SELECT 文 GROUP での1件目を...
-
Outlook 送受信エラー
-
エクセルの関数について教えて...
-
for whichの使い方
-
EXISTSを使ったDELETE文
-
INSERT文でフィールドの1つだ...
-
access2021 VBA メソッドまたは...
-
UPDATE文のWHERE条件に他のテー...
おすすめ情報