アプリ版:「スタンプのみでお礼する」機能のリリースについて

テーブル1
販売店名 品名  金額
A販売店/いちご/500円
A販売店/みかん/300円
A販売店/りんご/800円
B販売店/いちご/500円
B販売店/みかん/300円
B販売店/りんご/800円
B販売店/ばなな/400円
C販売店/いちご/500円
C販売店/みかん/300円
C販売店/りんご/800円

テーブル2
販売店名 品名1 品名2 品名3 品名4
A販売店/いちご/みかん/りんご
B販売店/いちご/みかん/りんご/ばなな
C販売店/いちご/みかん/りんご

これを下記のように結合したい
販売店名 品名1 金額   品名2 金額   品名3 金額   品名4 金額
A販売店/いちご/500円/みかん/300円/りんご/800円
B販売店/いちご/500円/みかん/300円/りんご/800円/ばなな/400円
C販売店/いちご/500円/みかん/300円/りんご/800円


どのようにすればよいでしょうか?
クエリーだけでも可能ですかね?

A 回答 (1件)

2つの方法で



金額部分は数値であるとします
なお、希望の最終形表示での、"金額" ・・・
同じ文字列のフィールドは作成できないので 金額1、金額2 ・・・


1)DLookup を使う

SELECT 販売店名,
品名1,
DLookup("金額","テーブル1","販売店名='" & 販売店名
& "' AND 品名='" & 品名1 & "'") AS 金額1,
品名2,
DLookup("金額","テーブル1","販売店名='" & 販売店名
& "' AND 品名='" & 品名2 & "'") AS 金額2,
品名3,
DLookup("金額","テーブル1","販売店名='" & 販売店名
& "' AND 品名='" & 品名3 & "'") AS 金額3,
品名4,
DLookup("金額","テーブル1","販売店名='" & 販売店名
& "' AND 品名='" & 品名4 & "'") AS 金額4
FROM テーブル2;


2)クロス集計を使う

以下内容で、クエリ ★★ を作っておいて

SELECT 1 AS 順, 販売店名, 品名1 AS 品名 FROM テーブル2
WHERE 品名1 Is Not Null
UNION ALL
SELECT 2, 販売店名, 品名2 FROM テーブル2
WHERE 品名2 Is Not Null
UNION ALL
SELECT 3, 販売店名, 品名3 FROM テーブル2
WHERE 品名3 Is Not Null
UNION ALL
SELECT 4, 販売店名, 品名4 FROM テーブル2
WHERE 品名4 Is Not Null;


以下のクロス集計で最終形にする


TRANSFORM First(IIF(S=1,Q2.品名,Q2.金額)) AS 値
SELECT Q1.販売店名 FROM (
SELECT 1 AS S, * FROM ★★
UNION ALL
SELECT 2, * FROM ★★) AS Q1
INNER JOIN テーブル1 AS Q2
ON Q1.販売店名=Q2.販売店名 AND Q1.品名=Q2.品名
GROUP BY Q1.販売店名
PIVOT IIF(S=1,'品名','金額') & Q1.順
IN ('品名1','金額1','品名2','金額2','品名3','金額3','品名4','金額4');


余談)テーブル1だけからでも以下の様な表示は可能

どのように表示されるのかは、実際にやってみてください

TRANSFORM Sum(金額) AS 値
SELECT 販売店名, Sum(金額) AS 計 FROM (
SELECT 1 AS T, 販売店名, 品名, 金額 FROM テーブル1
UNION ALL
SELECT 2, '合計', 品名, 金額 FROM テーブル1) AS Q1
GROUP BY T, 販売店名
PIVOT 品名;
    • good
    • 0
この回答へのお礼

30246kiku様ありがとうございました。
クエリ一つでこんなに出来あがるなんて、嬉しい限りです。

お礼日時:2016/05/04 17:23

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

関連するカテゴリからQ&Aを探す