- 締切済み
SQLserverでのクロス集計
No.1000123の質問に類似しておりますが、ストアドで求めるのではなく、VB6SP4でCREATE VIEWを実行し、クロス集計のViewをデータベースに作成したいのです。 シリアルNo,商品No,発送日 A001,A,2004/09/10 A002,A,2004/09/14 A003,A,2004/09/14 B001,B,2004/09/10 B002,B,2004/09/14 C001,C,2004/09/18 を 商品No,2004/09/10,2004/09/14,2004/09/18 A,1,2,0 B,1,0,1 C,0,0,1 という形に出力したいときは、具体的にどういう手順でSQLを作成して実行すればよろしいでしょうか。 (日付部分が動的に増えたり減ったりします) よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- sakko99
- ベストアンサー率63% (19/30)
ADOを想定していますが、こういう質問ですか?(これだとマルチユーザには対応できませんが) cn.open "provider=・・・" cmd.activeconnection=cn cmd.commandtext="select distinct date_1 from Table" rs1=cmd.execute if not rs1.eof then do until rs1.eof str1 = str1 & "sum(case when 発送日='" & rs1(0) & "' then 1 end) as [" & rs1(0) & "]," rs1.movenext Loop str1 = left(str1, len(str1)-1) str2=str2 & " if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[V_TEST]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)" str2=str2 & " drop view [dbo].[V_TEST]" str2=str2 & " CREATE VIEW V_TEST AS SELECT 商品No," & str1 & " FROM Table Group by 商品No" cmd.commandtext=str2 cmd.execute end if cn.close
- sakko99
- ベストアンサー率63% (19/30)
select 商品No, sum(case when 発送日='2004/09/10' then 1 end) as [2004/09/10], sum(case when 発送日='2004/09/14' then 1 end) as [2004/09/14], sum(case when 発送日='2004/09/18' then 1 end) as [2004/09/18], ・・・ From Table Group by 商品No VBからCreateするなら事前にどの発送日にデータがあるかを取得して 上記のSUM部分を動的に変えればよろしいかと。
補足
ご回答ありがとうございます。 手動で日付を書くやり方はわかりましたが、 日付の部分が動的に変化します。 その日付の部分の動的な処理の方法をご教授願います。