プロが教える店舗&オフィスのセキュリティ対策術

お世話になります。
アクセスでデータを取り込んだデータをエクセルで吐き出す為、横に並べたいと思っています。
種類 品物
a  aa-1
a  aa-3
a  aa-5
b  bb-3
c  cc-1
c  cc-2
上記のようなデータを
種類 品物1   品物2   品物3
 a  aa-1    aa-3    aa-5
 b  bb-3
 c  cc-1    cc-2

というようにクロス集計をしたいと思っています
品物1 品物2 品物3にあたる列見出しをどのようにしたら良いか分かりません。
種類ごとにカウントでくる関数ってありますでしょうか?
よろしくお願いします。

A 回答 (2件)

>種類ごとにカウントでくる関数ってありますでしょうか?



関数はないと思いますが、クエリを工夫すればカウントは可能です。

SELECT X.種類, X.品物, '品物' & Count(N.種類) AS 列見出
FROM テーブル名 AS X INNER JOIN テーブル名 AS N
ON (X.種類=N.種類) AND (X.品物>=N.品物)
GROUP BY X.種類, X.品物;

又は、

SELECT X.種類, X.品物,
'品物' & DCount("*","テーブル名","種類 ='" & X.種類 & "' AND 品物 <= '" & X.品物 & "'") AS 列見出
FROM テーブル名 AS X;

どちらのクエリでも、同じ結果が出ます。
上記の方がパフォーマンスは良いと思います(しかし難解です)。
下記のクエリの方が分かり易いかも。
お好きな方を使ってください。

このクエリで、種類ごとのカウントをし、
ついでに"品物"という文字列をつけて、列見出用に使います。
このクエリを「集計準備」という名前で保存したとします。

次に、上記のクエリを元に、クロス集計をします。

TRANSFORM First(集計準備.品物) AS 品物の先頭
SELECT 集計準備.種類
FROM 集計準備
GROUP BY 集計準備.種類
PIVOT 集計準備.列見出;

これで、ご希望の結果になると思います。

ただし、全く同じ種類、品物がある場合、
この方法では、うまく動きませんので、注意して下さい。

全く同じレコードが含まれている場合は、
オートナンバー等の主キーを追加し、
それを集計に利用する必要があると思います。


----補足----
SQL文からクエリを作るには、
クエリの新規作成 → テーブルは追加しない
表示 → SQLビュー
として、SQL文をコピー&ペーストして下さい。
テーブル名は正しいテーブル名に置き換えて下さい。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。思い通りに出来ました。ありがとうございます。内容が難しかったですが、これから理解して勉強してみようと思います。

お礼日時:2007/05/29 08:51

並べる順番を決定できるフィールドがいるのですが


品物の文字コード順でよさそうですね

クエリデザインビューで下のような式フィールドを作ります

列名:"品物" & DCount("*","テーブル名","種類='" & 種類 & "' and 品物<='" & 品物 & "'")

このクエリをクロス集計クエリに変え

種類:行見出し
列名:列見出し
品物:値:先頭
    • good
    • 0
この回答へのお礼

ありがとうございます。いろいろな方法があって勉強になりました。
またよろしくお願いします。

お礼日時:2007/05/29 08:52

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A