假设我销售的服务跨越一段时间(几天,几个月甚至几年)。我有一个产品表,其中列出了每个产品,以及Customer_ID
和Service_start
以及Service_end
日期。
现在我想在每个客户中列出所有对(Service_start
,Service_end
)的组合;例如(按Customer_ID排序的表)
Lp Service_start Service_end Customer_ID
--------------------------------------------
1 2-Feb-2014 8-Aug-2014 1
2 5-May-2014 20-Dec-2014 1
3 7-Jul-2014 9-Sep-2014 1
4 13-Jan-2014 13-Jan-2015 2
.. ... ... ...
我想变成
Lp Service_start Service_end Customer_ID
--------------------------------------------
1 2-Feb-2014 8-Aug-2014 1
2 2-Feb-2014 20-Dec-2014 1
3 2-Feb-2014 9-Sep-2014 1
4 5-May-2014 8-Aug-2014 1
5 5-May-2014 20-Dec-2014 1
6 5-May-2014 9-Sep-2014 1
7 13-Jan-2014 8-Aug-2014 1
8 13-Jan-2014 20-Dec-2014 1
9 13-Jan-2014 9-Sep-2014 1
10 13-Jan-2014 13-Jan-2015 2
... ... ... ...
表格足够大,不适合记忆。
SQL如何实现?还是SAS?
答案 0 :(得分:2)
您可以在SAS和SQL中执行此操作。这是SQL的想法:
select ss.service_start, se.service_end, ss.customer_id
from (select distinct customer_id, service_start from table) ss join
(select distinct customer_id service_end from table) se
on ss.customer_id = se.customer_id;
这与SAS proc sql
兼容。
在大多数SQL方言中,您可以使用lp
添加row_number() over (order by customer_id, service_start, service_end)
列。在SAS中,您可以使用monotonic()
或proc sql
之后的数据步骤。