重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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を作成して実行すればよろしいでしょうか。
(日付部分が動的に増えたり減ったりします)

よろしくお願いします。

A 回答 (2件)

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
    • good
    • 0

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部分を動的に変えればよろしいかと。

この回答への補足

ご回答ありがとうございます。
手動で日付を書くやり方はわかりましたが、
日付の部分が動的に変化します。

その日付の部分の動的な処理の方法をご教授願います。

補足日時:2006/04/21 08:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す