2012-01-23 8 views
2

私は、人々がお客様にメールを送信するために使用できるフォームを用意しています。ユーザは、2つの缶入りメッセージ(メッセージ「1」またはメッセージ「2」)の中から選択する選択肢を有する。裏では、「SEND」ボタンを押すたびに、エラーハンドラを通る間は「RECORDS」テーブルにログインします。お客様のIDごとにメールの種類を数えます

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のためのものと補数をカウントクエリを必要とする:

はのはRECORDSテーブルが2列を持っているふりをしてみましょう。だから、結果セットは次のようになります。しばらく

CUST_ID EMAIL_1_COUNT EMAIL_2_COUNT 
0000   3    1 
0001   0    1 
0002   2    0 
0003   0    3 

私が使用した回数、グループBYS、havings、労働組合、ネストされた選択を、私が言ったように、私は比較的にある何かを複雑にする上で、おそらくです簡単です。考慮すべき

+0

これらの試行を投稿すると、間違ったところを指摘しやすくなります。 :) – GolezTrol

答えて

4
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 
+0

あなたは命を救っています。親切にありがとう –

1

別のオプションは、これはしかしCUST_ID1、および2の列見出しを生成するTRANSFORM

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; 

でピボットクエリを使用することです。あなたは電子メールの種類を持つ別のテーブルを持っていた場合は、それは(あなたが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 
+0

面白いレスポンス。フォームが大きくなり、缶詰のメッセージを追加すると、この応答を使用する必要があります。今のところ最初の応答は正常に動作し、パフォーマンスの問題が発生するまでしばらくの間うまく動作するはずです。 –

関連する問題