2016-03-29 123 views
0

我想知道是否有可能在(t)SQL中避免以下問題中的for/while循環。在(t)-sql中循環遍歷鍵值對時可能會避免while循環條件

的三個表: 1. CAMPAIGN:包含CAMPAIGN_ID柱(Camp_ID)和一個日期欄(起始)描述廣告活動的開始日期

  • 要買:包含客戶在特定日期的customer_id列(Cust_ID),收入列(rev)和日期列(日期)

  • SELECTION:包含客戶對營銷活動的分配,因此Cust_ID)和(Camp_ID)

  • 那麼,我想知道什麼:客戶在創建營銷活動後創建的收入是多少?

    所以混合Python和SQL

    for (CID, SD) IN CAMPAIGN: 
        SELECT Cust_ID, SUM(rev) 
        FROM SALE 
        JOIN SELECTION 
        ON SALE.Cust_ID = SELECTION.Cust_ID 
        WHERE SELECTION.Camp_Id = CID AND SALE.date > SD 
    

    CID和SD指Camp_Id和競選

    的起始日期是否有可能取代本作使用一些elemntary SQL語法循環。 我發現使用遊標和while循環的解決方案,但是,可能會有一些更簡單的事情,比如我看不到的一些分組和連接。

    回答

    1

    你可以把一個JOIN該條件和組由CID:

    SELECT CAMPAIGN.CID, Cust_ID, SUM(rev) 
    FROM SALE 
    JOIN SELECTION 
        ON SALE.Cust_ID = SELECTION.Cust_ID 
    INNER JOIN CAMPAIGN 
        ON SELECTION.Camp_Id = CAMPAIGN.CID AND SALE.date > CAMPAIGN.SD 
    GROUP BY CAMPAIGN.CID, Cust_ID 
    
    +0

    感謝,比較容易的方式我想。 – Quickbeam2k1