VBcsript(asp)で作ったページにデータベースからデータを読み込んで表示しております。
テーブル名は「Syouhin」でフィールドは「SNo」(商品No)「SName」(商品名)「SCat」(商品種類)「ODate」(日付)です。
以下のようなSQL文で指定期間内(ODATE)で商品名と商品種類が同じレコードの数(件数)をカウント表示させました。
SELECT SName,SCat, COUNT(*)
FROM Syouhin
WHERE ODate between MMColParam% AND MMColParam2 GROUP BY SName,SCat;
*MMColParam%及び同2にはテキストボックスで日付を代入して期間を指定しております。
表示している内容は
「商品名」「商品種類」「件数」(カウントした)です。
商品種類には1~5の数値が入るのですが、この作成方法だと表示が
「商品1」「1」「3」
「商品1」「2」「5」
「商品1」「4」「9」
「商品4」「2」「8」
「商品8」「1」「12」
のように同じ「商品1」で「商品種類」が違うデータが違うレコードになってしまいます。
「商品名」&「商品種類」別でカウントはしたいのですが、表記は
「商品1」「3」「5」「0」「9」「0」
「商品4」「0」「8」「0」「0」「0」
「商品8」「12」「0」「0」「0」「0」
1列目に「種類1」のカウント、2列目に「種類2」のカウント~5列目に「種類5」のカウントが入った表にしたいと思っています。(その際、もとのデータベースにその「商品種類」が無い場合(レコードセットで抽出されない場合)は0を入力)の形にしたいと考えております。
最終的にテーブルデータをテキストデータとして書き出したいので
この表の形にさえ出来れば方法は問いません。
何か良い方法はないでしょうか?
No.3ベストアンサー
- 回答日時:
ドリームウィーバーは使ったことが
無いのですが、Access本体の
クエリビルダでは使えると思います。
次に思いつく手は二つあります。
一つはAccessにTransformクエリを
作成しておき、"SELECT * FROM クエリ"
というSQLで開く。こちらは条件の反映が
難しいです。別途、条件テーブルを使って、
結合させる必要があるかも知れません。
もう一つは条件で集計する方法です。
SELECT SName,
SUM(IIf(SCat=1,1,0)),
-- 中略 --
SUM(IIf(SCat=5,1,0))
FROM Syouhin
WHERE ~
GROUP BY SName
もしかして、IIfはAccess特有の関数
なので、通用しないかも知れません。
Oracleで言うDECODEやCASE WHEN に
相当する関数です。
お礼遅くなりすみません。
いつも丁寧なご回答ありがとうございます。
SUM(IIf(SCat=1,1,0)),~
は構文エラー(未定義の関数)で駄目でした。
代わりに
SELECT SName,SCat,
SUM(Switch(SCat=1,1,Scat=2,1,SCat=3,1,Scat=4,1,SCat=5,1, True,0))
FROM claim
GROUP BY SName,SCat;
で作成すると問題ないのですが、これだと当然最初のCOUNTを使った時と同じ結果になってしまします。
どうしてもSCatの値ごとに列が作成できません。
色々な方法考えて頂いたのに申し訳無いです。
No.2
- 回答日時:
実際のSQLは以下の通りです。
TRANSFORM Nz(Count(*),0) AS X
SELECT SName
FROM Syouhin
GROUP BY SName
PIVOT SCat IN (1,2,3,4,5)
SELECT に続く項目は行見出し、
PIVOT句に続く項目は列見出し、
TRANSFORM直後が値です。
値はグループ化項目であっては
ならないという規則があります。
今回はレコード数なのでOKです。
PIVOT句にIN条件を付けると、
列数が固定され、データが存在
しない所はNullになります。
そこで、Nz(~,0)でNullなら0に
なるようにしています。
TRANSFORMは私の知る限りでは
Accessにしかありません。
他のDBシステムでこれをやるには
大変面倒なクエリになります。
大変丁寧なご説明ありがとうございます。
早速試して見たのですが
「SELECTステートメントまたはレコードセットを返すストアードプロシージャを入力してください」とエラーが出てしまいます。
ドリームウィーバーCS3のレコードセット(詳細)SQL入力欄に記入する形で作成しているのですが
どうやらTRANSFORMは使えないようです。
詳しく教えていただいたのに申し訳ありません。
No.1
- 回答日時:
データベースは何を使っていますか?
Accessの場合はTransformで作成
できます。他のDBですと、別の手段
になります。
ご回答ありがとうございます。
データベースはAccessです。
IISとODBCを使っています。
Trannsformですか、勉強不足で知りませんでした。
列をまとめるのにPIVOTを使うみたいですが、うまくいきません。
「商品種類」は1~5の数字しか入らないので、
「商品名」「種類1」「種類2」「種類3」「種類4」「種類5」
商品1 3 5 0 9 0
商品4 0 8 0 0 0
商品8 12 0 0 0 0
のように行は商品名で分けて列は種類別にカウントした数値を表示(無い場合は0を)したいのですがうまくいきません。
良い方法があればお教え願えるでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Excel(エクセル) エクセルの表について 3 2023/04/14 18:00
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- メルカリ メルカリの上位表示について質問があります。 私は現在7種類の商品を7個ずつ計49個出品しています。 1 2022/10/10 10:33
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) VBAコードで質問があります 2 2022/10/20 15:27
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Visual Basic(VBA) VBAで質問があります 1 2022/10/19 10:32
- SQL Server SQLのクエリの書き方 1 2022/03/29 23:06
- Visual Basic(VBA) チームごとにどの商品を何個希望しているか数量を算出したいです。 A列(A2~A265)に各チーム名が 3 2023/07/18 18:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースファイル(.db)を開...
-
ACCESSのSQLで、NULLかNULLでな...
-
警察はスマホに保存した動画や...
-
コンピュータ用語、データベー...
-
更新クエリをリンクデータベー...
-
accessでの請求管理について
-
データベースソフトのTCARDにつ...
-
データベースソフトの「TCARD f...
-
縦書きテキストボックスの表示"...
-
Accessのリンクテーブルについて
-
業務用のデータベースサーバー...
-
Accessを開きなおすとテキスト...
-
android版のMs accessはありま...
-
c言語の問題です。これを踏まえ...
-
「1004:アプリケーション定義...
-
Accessフォームからパラメータ...
-
QSL でのフォーム画面作成について
-
リスト形式の表とデータベース...
-
マクロの別シートのデータ振り...
-
Q&Aフォームを作成したいのです...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PL/SQLとMS SQLServerの違いを...
-
どのプログラムがどのDBを使用...
-
このようなホームページを作り...
-
Word、Excelのファイル名に自動...
-
不倫でバレた後、再構築と仮面...
-
Windows serverでマルチキャス...
-
RAID5+HS vs RAID6
-
付加価値を加える?
-
QGISでの円(圏域)描画方法に...
-
VBAをDLL化する方法を教えてく...
-
Accessの代わりのノンプログラ...
-
Movable typeで作ったサイトの...
-
パケットキャプチャツール(Wir...
-
EXCEL VBAのModuleの使い方
-
インストーラーの作成
-
ExcelをPDFにコンバート
-
VB6の変数宣言で、末尾に"*"と...
-
diffツールでコメントを比較対...
-
pdfの読み込み
-
デバッグツールの具体例を教え...
おすすめ情報