顧客IDごとの電子メールタイプを数える
質問
私は私たちのクライアントに電子メールを送るために人々が使用できる形式を持っています。ユーザは、2つの缶詰メッセージ(メッセージ「1」またはメッセージ「2」)を選択することができるオプションを有する。シーンの背後にある「送信」ボタンを押すたびに、それが「レコード」テーブルにログインします(エラーハンドラを通してそれを作る限り)。
レコードテーブルに2列の場所があるふりをしましょう。
CUST_ID EMAIL_NUM
0000 1
0000 2
0000 1
0000 1
0001 2
0002 1
0002 1
0003 2
0003 2
0003 2
.
各CUST_IDに1とTWOをカウントするクエリが必要です。だから結果セットはこのようなものを見るべきです:
CUST_ID EMAIL_1_COUNT EMAIL_2_COUNT
0000 3 1
0001 0 1
0002 2 0
0003 0 3
.
私はカウント、グループバイス、ビング、しばらくの中、ユニオン、ネストされた選択を使用しましたが、私が言ったように、私はおそらく比較的簡単な何かを複雑にしています。
解決
select
CUST_ID,
sum(iif(EMAIL_NUM = 1, 1, 0)) as EMAIL_1_COUNT,
sum(iif(EMAIL_NUM = 2, 1, 0)) as EMAIL_2_COUNT
from
RECORDS
group by
CUST_ID
. 他のヒント
考慮すべき別の選択肢は、変換でピボットクエリを使用することです。
TRANSFORM NZ(Count(RECORDS.Email_NUm),0) AS CountOfEmail_NUm
SELECT RECORDS.CUST_ID
FROM RECORDS
GROUP BY RECORDS.CUST_ID
PIVOT RECORDS.Email_NUm;
.
ただし、これはCUST_ID
、1
、および2
の列ヘッドを作成します。ただし、電子メールの種類を持つ別のテーブルがある場合は、価値があるかもしれません(特に2より多くの電子メールタイプが多い場合)
SQLはこののように見えるかもしれません
TRANSFORM NZ(Count(r.Email_NUm),0) AS CountOfEmail_NUm
SELECT r.CUST_ID
FROM RECORDS r
INNER JOIN EMAIL_TYPES et
ON r.Email_NUm = et.Email_NUm
GROUP BY r.CUST_ID
PIVOT et.TYPE_NAME;
.
この出力を生成する
CUST_ID | Work | Home
------- ---- ----
0000 | 3 | 1
0001 | 0 | 1
0002 | 2 | 0
0003 | 0 | 3
. 所属していません StackOverflow