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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- 統計学 一変量分析(度数分布表)は、結果をもとに特に検定せずに断定してもよいですか? 7 2022/11/24 23:20
- Excel(エクセル) エクセルで最初に値が入っているセルを見つける方法はありますか? 2 2023/07/18 14:58
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Excel(エクセル) 条件付き書式 別のシートで色付けされたセルデータの転記漏れを防ぐ書式を入れたい 4 2022/04/22 06:36
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- その他(ビジネススキル・経営ノウハウ) クラウドファウンディングによる新製品の販売支援要求。「あれ?この商品、もう完成品じゃね?」という疑問 2 2022/08/22 12:32
- Excel(エクセル) 年齢ごとの商品の販売個数を集計しようとしています。 a列が日付、b列が年齢、c列が販売個数のばあいで 4 2022/09/26 22:35
- Excel(エクセル) IF 関数で「〇〇 という文字を含む場合」の分岐処理で表示された数字はSUMで数字集計できますか? 3 2022/08/02 16:29
- Excel(エクセル) Excelのマクロを教えていただけないでしょうか? 1 2023/07/06 19:56
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
検索結果の列数を動的に変更したい
SQL Server
-
SQLで列名を変数にできないでしょうか
SQL Server
-
列名に変数を使うことはできないのでしょうか?
SQL Server
-
-
4
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
5
ODBCリンクの際にACCESSでは読み取り専用にしたい!
Oracle
-
6
ACCESSで指定されたテーブルから削除できませんでしたとエラー
その他(データベース)
-
7
複数列フィールド値のクロス集計
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのAccessでDATE型のINSERT
-
1、Rstudioで回帰直線を求める...
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
excel2013 MonthDays 関数が使...
-
SELECT 文 GROUP での1件目を...
-
datetime型でNULL値を入れたい。
-
EXISTSを使ったDELETE文
-
エクセルで最後の文字だけ置き...
-
for whichの使い方
-
SQLで特定の項目の重複のみを排...
-
フィルターかけた後、重複を除...
-
重複していないレコードの抽出...
-
副問合せの書き方について
-
エクセルの関数について教えて...
-
カーソル0件の時にエラーを発生...
-
INSERT文でフィールドの1つだ...
-
処理件数を非表示にしたい
-
SQLServerで文字列の末尾からあ...
-
Exel VBA 別ブックから該当デ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのAccessでDATE型のINSERT
-
クロス集計で、列を動的に
-
●SQL Server 2000●日付だけ取得...
-
SQLサーバでの和暦(int)→西暦へ...
-
SQLで日付の指定
-
ACCESS 日付の比較
-
nvarcharとdatetimeで作成され...
-
select文で int を yyyy-mm-dd...
-
日付/時刻型のフィールドに対し...
-
Datetime型 条件について
-
SQLのクエリの書き方を教えて下...
-
SQLServerでの日付関連に関する事
-
差し込み後、元データを変更し...
-
外部参照してるキーを主キーに...
-
フィルターかけた後、重複を除...
-
エクセルで最後の文字だけ置き...
-
SELECT 文 GROUP での1件目を...
-
1、Rstudioで回帰直線を求める...
-
for whichの使い方
-
カーソル0件の時にエラーを発生...
おすすめ情報