出来るのだASP Q&A掲示板(過去LOG)
訪問数 52046
昨日 889
今日 776 【PR】 パソコン入門からIT専門書まで幅広く取り揃えています。セブン-イレブン受取り手数料無料のセブンアンドワイ。 |
![]() ![]() ![]() ![]() ![]() |
[4090] Transform〜Pivot文なしでクロス表を作るには… |
投稿者:INA00さん 2004/02/28 21:20:59 |
INA00 です。お世話になります。 「ASPでクロス表を作成する」という課題に取り組んでいるの ですが、うまくいきません… データはAccess2000で作成されており、構造は 品目コード 支店コード 月コード 売上額 001 01 01 100 001 02 01 200 002 01 02 300 : のようになっています。 このデータから 1月 2月 … 12月 品目001 (1月売上)(2月売上) (12月売上) 品目002 : という表を閲覧できる仕組みをASPで作ろうと考えています。 クロス表を作成する際、AccessのTransform〜Pivot文を使うと 一発なのですが、これはMSの独自仕様だそうで、他のSQLサーバとの 互換性を考えて使わずに作成したいのです。 そこで次のような手順で作成しようとしました。 1.1月の品目別売上げをテーブルTEMP1に書き出す 2.2月の品目別売上げをテーブルTEMP2に書き出す 3.Where文で、TEMP1とTEMP2の同じ品目を接続し、 (品目コード,1月売上合計,2月売上合計)をTEMP3に書き出す 4.TEMP1,TEMP2 をDROPする。 5.ALTER TABLEでTEMP3をTEMP1に名称変更 6.3月の品目別売上げをテーブルTEMP2に書き出す 7.Where文で、TEMP1とTEMP2の同じ品目を接続し、 (品目コード,1月売上合計,2月売上合計,3月売上げ合計)を TEMP3に書き出す 8.TEMP1,TEMP2 をDROPする。 9.ALTER TABLEでTEMP3をTEMP1に名称変更 : と、これを12月まで繰り返して作っていきます。 しかし実際のコーディングでつまづきました。 ひとまず「1月と2月の売上高を集計して、TEMP3に出力する」 ことを考え、実験的に以下のようにコーディングしました ’コネクション確立 Set ObjConn = Server.CreateObject("ADODB.Connection") ObjConn.open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & _ Server.Mappath("年間売上.mdb") 'dbからデータを取り出す Set ObjRS = Server.CreateObject("ADODB.Recordset") 'SQL文を作成 StrSQL1 = "SELECT 品目コード, SUM(売上額) as 1月売上 INSERT INTO TEMP1 FROM 年間売上 WHERE 月=01 GROUP BY 品目コード" StrSQL2 = "SELECT 品目コード, SUM(売上額) as 2月売上 INSERT INTO TEMP2 FROM 年間売上 WHERE 月=02 GROUP BY 品目コード" StrSQL3 = "SELECT TEMP1.品目コード,TEMP1.1月売上, TEMP2.2月売上 INSERT INTO TEMP3 FROM TEMP1,TEMP2 WHERE TEMP1.品目コード=TEMP2.品目コード" StrSQL = StrSQL1 & StrSQL2 & StrSQL3 objRS.open StrSQL,ObjConn : これで"年間売上.mdb"にTEMP3が追加され、TEMP3には品目コードと1月と2月の売上げが入る、と考えたのですが、実際には HTTP500.100 ASPエラー Microsoft OLE DB Provider for ODBC Drivers (0x80040E14) [Microsoft][ODBC Microsoft Access Driver] クエリ式 'HS SELECT TEMP1.HS' の 構文エラー となってしまいます。 SELECTを2連続で使うことはできないのか、それとも一度DBをcloseしないといけないのか、原因がよくわかりません。 あるいはもっと別な方法があるのでしょうか… 同じことを経験された方、ご教授いただけましたら幸甚です。 どうぞよろしくお願い致します。 |
![]() ![]() |
![]() ![]() |
TreeBBS For ASP V.0.1.3 |