
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースファイル(.db)を開...
-
警察はスマホに保存した動画や...
-
エクセルのフィルタ抽出が固まる
-
android版のMs accessはありま...
-
ACCESSのSQLで、NULLかNULLでな...
-
シートが異なるセル同士を、相...
-
エクセル 顧客管理表に担当ごと...
-
LEFT JOIN をしているのに表示...
-
将棋のDB。「この局面と同一の...
-
私はシステム会社に務めている...
-
Access フォーム上でコンボボッ...
-
帳票フォームでのあるコンボボ...
-
アクセス SQLで重複排除でcount...
-
DocuWorksでの印刷
-
最新の日付とその金額をクエリ...
-
CSVファイルでテキストの改行の...
-
Excelフィルタ抽出で「検索して...
-
半角ハイフンに似た文字
-
汎用カード型のデータベースソ...
-
Accessフォーム上でレコードご...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PL/SQLとMS SQLServerの違いを...
-
データーベースを組むのに幾ら...
-
SQLで抽出したデータの表示方法
-
HPでのデータベースの活用法?
-
初めてのデータベース
-
ホームページ上でのデータベー...
-
本気の不倫後の再構築について
-
QGISでの円(圏域)描画方法に...
-
付加価値を加える?
-
RAID5+HS vs RAID6
-
Word、Excelのファイル名に自動...
-
Movable typeで作ったサイトの...
-
VBAをDLL化する方法を教えてく...
-
不倫でバレた後、再構築と仮面...
-
Accessの代わりのノンプログラ...
-
パケットキャプチャツール(Wir...
-
Windows serverでマルチキャス...
-
pdfの読み込み
-
Code Readingという本を読んでいて
-
Movable Typeで特定のページの...
おすすめ情報