0

Web サイトごとに 1 つの顧客アクティビティを表示する必要があるクエリ リクエストがありますが、アクティビティごとに 1 人の顧客が複数回表示されるのではなく、それぞれ 1 行のみである必要があります。以下は私が試したクエリですが、より多くの行をもたらします。重複を避け、各アクティビティの行ごとに 1 人の顧客のみを表示する方法を教えてください。

SELECT i.customer_id, i.SEGMENT  AS Pistachio_segment,
    (CASE when S.SUBSCRIPTION_TYPE = '5' then 'Y' else  'N' end ) PB_SUBS
    (CASE WHEN S.SUBSCRIPTION_TYPE ='12' THEN 'Y' ELSE 'N' END) Daily_test,
    (CASE when S.SUBSCRIPTION_TYPE ='8' then 'Y' else 'N' end) COOK_4_2
FROM IDEN_WITH_MAIL_ID i  JOIN CUSTOMER_SUBSCRIPTION_FCT S
ON I.IDENTITY_ID = S.IDENTITY_ID and I.CUSTOMER_ID = S.CUSTOMER_ID
WHERE s.site_code ='PB' and s.subscription_end_date is null
4

4 に答える 4

0

おそらくあなたはこのようなものを探しています:

SELECT i.customer_id, i.SEGMENT  AS Pistachio_segment,
    MAX(CASE when S.SUBSCRIPTION_TYPE = '5' then 'Y' else  'N' end ) PB_SUBS
    MAX(CASE WHEN S.SUBSCRIPTION_TYPE ='12' THEN 'Y' ELSE 'N' END) Daily_test,
    MAX(CASE when S.SUBSCRIPTION_TYPE ='8' then 'Y' else 'N' end) COOK_4_2
FROM IDEN_WITH_MAIL_ID i  JOIN CUSTOMER_SUBSCRIPTION_FCT S
ON I.IDENTITY_ID = S.IDENTITY_ID and I.CUSTOMER_ID = S.CUSTOMER_ID
WHERE s.site_code ='PB' and s.subscription_end_date is null
GROUP BY i.customer_id, i.SEGMENT

ただし、関係するテーブルについて詳しく知らなければ、確信が持てません。

于 2012-04-06T10:46:31.907 に答える
0

customer_id でグループ化し、選択している他の列の集計を実行する必要があるようです。例えば:

sum(case when s.subscription_type = '5' then 1 else 0 end) as pb_subs_count
于 2012-04-06T05:00:47.423 に答える
0

次の 2 つのいずれかを試すことができます。

  1. GROUP BY ステートメントを使用して、同じ ID を持つすべてのレコードを結合します。

    ...
    WHERE s.site_code ='PB' and s.subscription_end_date is null
    GROUP BY i.customer_id
    
  2. SELECT で DISTINCT コマンドを使用します。

    SELECT DISTINCT i.customer_id, i.SEGMENT, ...
    
于 2012-04-06T05:02:16.513 に答える