我有一个数据集,其中包含客户可以获得的服务类型的每月预算。SERVICES_ID是服务的类型,Begin_DT和End_DT给出 了服务适用的时间范围, COST_PER_MONTH 给出了每月预算的金额, NUMBER_OF_MONTHS给出了该服务的预算适用的月数。
这是一个示例数据集,您会注意到有两个客户,每个客户都有两个服务预算。一位客户同时享受两项服务 12 个月,另一位客户一项服务 12 个月,另一位客户服务 6 个月。
CREATE TABLE Services (
ID int,
SERVICES_ID int,
Begin_DT datetime,
End_DT datetime,
COST_PER_MONTH int,
NUMBER_OF_MONTHS int)
('10178', 9, '7/21/2011', '7/21/2012' 203.2, 12)
('10178', 10, '7/21/2011', '7/21/2012' 78.2, 12)
('13862', 12, '12/8/2011', '6/3/2012', 469.2, 6)
('13862', 10, '6/3/2011', '6/3/2012', 78.2, 12)
我需要有一个查询,它添加一个Month和一个Year变量,并为每个月添加行,服务预算在Begin_DT 和 End_DT之间的月份范围内。这就是我要找的:
CREATE TABLE Services_monthly (
ID int,
SERVICES_ID int,
Begin_DT datetime,
End_DT datetime,
Month int,
Year int,
COST_PER_MONTH int,
NUMBER_OF_MONTHS int)
('10178', 9, '7/21/2011', '7/21/2012', 7, 2011, 203.2, 12),
('10178', 9, '7/21/2011', '7/21/2012', 8, 2011, 203.2, 12),
('10178', 9, '7/21/2011', '7/21/2012', 9, 2011, 203.2, 12),
('10178', 9, '7/21/2011', '7/21/2012', 10, 2011, 203.2, 12),
('10178', 9, '7/21/2011', '7/21/2012', 11, 2011, 203.2, 12),
('10178', 9, '7/21/2011', '7/21/2012', 12, 2011, 203.2, 12),
('10178', 9, '7/21/2011', '7/21/2012', 1, 2012, 203.2, 12),
('10178', 9, '7/21/2011', '7/21/2012', 2, 2012, 203.2, 12),
('10178', 9, '7/21/2011', '7/21/2012', 3, 2012, 203.2, 12),
('10178', 9, '7/21/2011', '7/21/2012', 4, 2012, 203.2, 12),
('10178', 9, '7/21/2011', '7/21/2012', 5, 2012, 203.2, 12),
('10178', 9, '7/21/2011', '7/21/2012', 6, 2012, 203.2, 12),
('10178', 9, '7/21/2011', '7/21/2012', 7, 2012, 203.2, 12),
('10178', 10, '7/21/2011', '7/21/2012', 7, 2011, 78.2, 12),
('10178', 10, '7/21/2011', '7/21/2012', 8, 2011, 78.2, 12),
('10178', 10, '7/21/2011', '7/21/2012', 9, 2011, 78.2, 12),
('10178', 10, '7/21/2011', '7/21/2012', 10, 2011, 78.2, 12),
('10178', 10, '7/21/2011', '7/21/2012', 11, 2011, 78.2, 12),
('10178', 10, '7/21/2011', '7/21/2012', 12, 2011, 78.2, 12),
('10178', 10, '7/21/2011', '7/21/2012', 1, 2012, 78.2, 12),
('10178', 10, '7/21/2011', '7/21/2012', 2, 2012, 78.2, 12),
('10178', 10, '7/21/2011', '7/21/2012', 3, 2012, 78.2, 12),
('10178', 10, '7/21/2011', '7/21/2012', 4, 2012, 78.2, 12),
('10178', 10, '7/21/2011', '7/21/2012', 5, 2012, 78.2, 12),
('10178', 10, '7/21/2011', '7/21/2012', 6, 2012, 78.2, 12),
('10178', 10, '7/21/2011', '7/21/2012', 7, 2012, 78.2, 12),
('13862', 12, '12/8/2011', '6/3/2012', 12, 2011, 469.2, 6),
('13862', 12, '12/8/2011', '6/3/2012', 1, 2012, 469.2, 6),
('13862', 12, '12/8/2011', '6/3/2012', 2, 2012, 469.2, 6),
('13862', 12, '12/8/2011', '6/3/2012', 3, 2012, 469.2, 6),
('13862', 12, '12/8/2011', '6/3/2012', 4, 2012, 469.2, 6),
('13862', 12, '12/8/2011', '6/3/2012', 5, 2012, 469.2, 6),
('13862', 12, '12/8/2011', '6/3/2012', 6, 2012, 469.2, 6),
('13862', 10, '6/3/2011', '6/3/2012', 6, 2011, 78.2, 12),
('13862', 10, '6/3/2011', '6/3/2012', 7, 2011, 78.2, 12),
('13862', 10, '6/3/2011', '6/3/2012', 8, 2011, 78.2, 12),
('13862', 10, '6/3/2011', '6/3/2012', 9, 2011, 78.2, 12),
('13862', 10, '6/3/2011', '6/3/2012', 10, 2011, 78.2, 12),
('13862', 10, '6/3/2011', '6/3/2012', 11, 2011, 78.2, 12),
('13862', 10, '6/3/2011', '6/3/2012', 12, 2011, 78.2, 12),
('13862', 10, '6/3/2011', '6/3/2012', 1, 2012, 78.2, 12),
('13862', 10, '6/3/2011', '6/3/2012', 2, 2012, 78.2, 12),
('13862', 10, '6/3/2011', '6/3/2012', 3, 2012, 78.2, 12),
('13862', 10, '6/3/2011', '6/3/2012', 4, 2012, 78.2, 12),
('13862', 10, '6/3/2011', '6/3/2012', 5, 2012, 78.2, 12)