2016-03-29 124 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