こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ACCESS SQLクエリーの活用について

以下データ群(テーブル名:table1)があります(会員番号はユニークをあらわします)。


注文日   会員番号  商品名  価格
2014/04/11 123456 パンツ  1000 ←一番古い注文日の行(4/11開始)が先頭
2014/04/20 123456 靴下   3000
2014/05/23 456789 半袖   2000
2014/05/23 456789 靴下   3000
2014/05/29 456789 パンツ  1000
2014/05/30 987654 靴下   3000
2014/06/09 987654 寝巻き  5000
2014/06/15 987654 下駄   4000


そして、

SELECT Q4.注文日, Q4.会員番号, Q4.商品名, Q3.購入回数, Q3.LTV
FROM
(SELECT Q1.注文日, Q1.会員番号,
Count(Q2.会員番号)+1 AS 購入回数,
DateDiff('d', Nz(Min(Q2.注文日),Q1.注文日), Q1.注文日) AS LTV
FROM
(SELECT 会員番号, 注文日 FROM ★★ GROUP BY 会員番号, 注文日) AS Q1
LEFT JOIN
(SELECT 会員番号, 注文日 FROM ★★ GROUP BY 会員番号, 注文日) AS Q2
ON Q1.会員番号=Q2.会員番号 AND Q1.注文日>Q2.注文日
GROUP BY Q1.会員番号, Q1.注文日) AS Q3
LEFT JOIN ★★ AS Q4
ON Q3.会員番号=Q4.会員番号 AND Q3.注文日=Q4.注文日
ORDER BY Q4.会員番号, Q4.注文日
;

達人からアドバイスいただいていた
上記SQLクエリーからの表示は

注文日 会員番号 商品名 購入回数 LTV
2014/04/11 123456 パンツ 1 0
2014/04/20 123456 靴下 2 9
2014/05/23 456789 半袖 1 0
2014/05/23 456789 靴下 1 0
2014/05/29 456789 パンツ 2 6
2014/05/30 987654 靴下 1 0
2014/06/09 987654 寝巻き 2 10
2014/06/15 987654 下駄 3 16

と出ます(GOOD!!!)。



上記に付随して、
このクエリーが参照しているテーブルの他の列(例:氏名、都道府県)もある(集計対象ではない)場合でそれも追加で(列名:氏名、都道府県を)表現するためには、

SELECT Q4.注文日, Q4.会員番号, Q4.商品名, Q3.購入回数, Q3.LTV

の構文箇所に2つの列名も手打ちで追加する必要がありますでしょうか。
(テーブル列名すべてを表示する・・といった個別に列名を指定しないで表示する方法はあるのでしょうか<列名が多いときに手間が若干かかる)

投稿日時 - 2014-09-20 18:54:03

QNo.8761676

困ってます

質問者が選んだベストアンサー

#1ですが、訂正

>> SELECT Q4.注文日, Q4.会員番号, Q4.商品名, Q3.購入回数, Q3.LTV
> でOK。
はまちがい

SELECT Q4.注文日, Q4.会員番号, Q4.氏名, Q4.都道府県, 4.商品名, Q3.購入回数, Q3.LTV
です

投稿日時 - 2014-09-20 21:30:55

お礼

いすれもありがとうございます!

後ほど試してみます!!!

投稿日時 - 2014-09-24 11:22:51

このQ&Aは役に立ちましたか?

9人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

> このクエリーが参照しているテーブルの他の列(例:氏名、都道府県)
がテーブル★★にあるなら

> SELECT Q4.注文日, Q4.会員番号, Q4.商品名, Q3.購入回数, Q3.LTV
でOK。

> 個別に列名を指定しないで表示する方法は あるのでしょうか
テーブル★★の全ての列がテーブル定義順に出て良いなら
SELECT Q4.*, Q3.購入回数, Q3.LTV
もアリ

投稿日時 - 2014-09-20 20:51:35

あなたにオススメの質問