2012-04-06 154 views
0

我有一個查詢請求,我必須爲每個網站顯示一個客戶活動,但它必須每個只有一行,而不是每個活動顯示多次的一個客戶。 以下是我試過的查詢,但帶來了更多的行。請幫助我如何避免重複併爲每項活動顯示每行只有一位客戶。合併數據SQL查詢

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 

回答

0

聽起來像您需要按customer_id進行分組,併爲您選擇的其他列執行聚合。例如:

sum(case when s.subscription_type = '5' then 1 else 0 end) as pb_subs_count 
0

你可以嘗試以下兩種情況之一:

  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, ... 
    
0

您可以在customer_id上使用聚合(SUM),但您希望在其他字段上發生什麼?例如,如果您對同一個客戶(2行)有SUBSCRIPTION_TYPE 5和13,那麼您需要哪個值?

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 

我不能肯定,不過,不知道更多關於所涉及的表。

+0

非常感謝你,我試過了,它似乎工作。我非常感謝幫助! – user1316749 2012-04-06 22:05:35