【发布时间】:2011-09-08 04:58:15
【问题描述】:
想象一张桌子:
CUST_PROMO (customer_id,PROMOTION) 用作客户收到的每个促销之间的映射。
select promotion, count(customer_id) as promo_size
from CUST_PROMO
group by promotion
这让我们得到每次促销活动的客户总数。
现在,我们有了 CUSTOMER (customer_id, PROMO_RESPONDED,PROMO_PURCHASED),它列出了客户以及哪些促销活动让客户做出了回应,以及哪些促销活动让他们购买了。
select PROMO_RESPONDED, count(customer_id) as promo_responded
from CUSTOMER
group by PROMO_RESPONDED
select PROMO_PURCHASED,count(customer_id) as promo_responded
from CUSTOMER
group by PROMO_PURCHASED
这一切都是不言自明的;现在我得到了每个促销活动成功的人数。
但是;我想结束的是[以 CSV 形式]
PROMOTION,PROMO_SIZE,PROMO_RESPONDED,PROMO_PURCHASED,PROMO_RESPSUCCESSRATE,blah
1,100,12,5,12%,...
2,200,23,14,11.5%,...
我不知道该怎么做。我可以联合上面的三个查询;但这实际上并没有得到我想要的结果。我考虑过创建一个内存表,插入每个促销值,然后执行一个更新语句并对其进行连接以设置每个值——但这很麻烦;并且需要为每个表/选择语句创建一个新的 UPDATE 语句。我还可以为每个结果集制作一个临时表,然后将它们连接在一起;但真的;谁愿意这样做?
我想不出任何有意义的方法来加入这些数据;因为我正在处理聚合。
所以,充其量,我需要一个函数,就像 UNION 一样,将组合结果集,但实际上会组合键上的类似列并添加这些列,而不是添加行的联合。描述使它听起来像一个 JOIN;但我看不到那个工作。
感谢您的帮助!
【问题讨论】:
标签: sql sql-server tsql join