Sql 用日期复制行
我试图建立一个表,每个半月薪期一行,多个项目的数百名员工的半月薪金额。我从ERP系统收到的行数据格式如下: 名称、项目、担保金额所有期间的工资总额、calcbegindate、calenddate 我想建立一个表,它将复制每行n乘以n,n是calcbegin和calcend之间的半个月发薪期数 我的问题是如何在范围之间生成半个月的日期,然后使用mssql 2008生成包含每个日期和相关信息的行 这是一个数据示例。我认为CTE是一条路要走,但我不知道如何让它工作。如果我能让CTE工作的话,我可以修改日期Sql 用日期复制行,sql,sql-server-2008,Sql,Sql Server 2008,我试图建立一个表,每个半月薪期一行,多个项目的数百名员工的半月薪金额。我从ERP系统收到的行数据格式如下: 名称、项目、担保金额所有期间的工资总额、calcbegindate、calenddate 我想建立一个表,它将复制每行n乘以n,n是calcbegin和calcend之间的半个月发薪期数 我的问题是如何在范围之间生成半个月的日期,然后使用mssql 2008生成包含每个日期和相关信息的行 这是一个数据示例。我认为CTE是一条路要走,但我不知道如何让它工作。如果我能让CTE工作的话,我可以修
Existing Data
Name Amount Per amt calcbegin calcend Pay Periods
Name1 5000 2,500 4/15/2013 5/15/2013 2
Name2 10000 2,000 4/15/2013 6/30/2013 5
Results Requested
Name Amount Pay amt calcbegin calcend Payperiods
1-Name1 5000 2,500 04/15/13 4/30/2013 1
2-Name1 5000 2,500 05/01/13 5/15/2013 1
1-Name2 10000 2,000 04/15/13 4/30/2013 1
2-Name2 10000 2,000 05/01/13 5/15/2013 1
3-Name2 10000 2,000 05/16/13 5/31/2013 1
4-Name2 10000 2,000 06/01/13 6/15/2013 1
5-Name2 10000 2,000 06/16/13 6/30/2013 1
非常感谢Justin Stolle,SQL:将日期范围转换为Google找到的日期列表。通过扩展他的示例,我能够构建一个功能正常的递归CTE。现在来调整日期
WITH cte (id, b, a_p, n,e ,pp, a, ae) AS
(SELECT Range_ID as id
,DATEADD(wk, 2,[calc begin]) AS B
,[Activity/Project] AS a_p
,Name as n
,[Calc End] as E
,DATEDIFF(w,[calc begin],[Calc End])/14 as pp
,([Salary Encumbrance] + [Benefits Encumbrance])/(DATEDIFF(w,[calc begin],[Calc End])/14) as a
,[Account Executive] as ae
FROM EncumReport
WHERE [Account Executive] like '%25%'
UNION ALL
SELECT Range_Id as id
,(DATEADD(wk, 2, cte.b)) AS b
,[activity/project] as a_p
,Name as n
,[Calc End] as E
,DATEDIFF(w,[calc begin],[Calc End])/14 as pp
,([Salary Encumbrance] + [Benefits Encumbrance])/(DATEDIFF(w,[calc begin],[Calc End])/14) as a
,[Account Executive] as ae
FROM cte
INNER JOIN encumreport
ON cte.id = range_id
WHERE cte.b < [calc end]-7)
SELECT id AS range_id
,b AS date_within_range,a_p as Projects, n as Name,e as EndDate, pp as PayPeriods, a as Amounts,ae as AccountExecutive
FROM cte
ORDER BY id, b
以日期为主键的数据库表在这里很方便。除了支付期间,您还可以存储财务信息、假期和其他您认为相关的字段。示例数据和所需输出将非常有用。我不完全确定我是否理解你的问题。听起来你想要的是一种日期维度。查看此链接,它建议您使用作为SQL Server数据工具一部分的维度向导。同意@sgedes。如果您为calcbegin和calcend提供一些示例值,以及在每种情况下希望得到的结果行,那么人们可能会理解您的问题。文字问题和故事很有趣,但解决方案需要真实的数据。听起来你们需要一个CTE来生成一个包含适当日期的表格。日期计算可能会变得相当复杂,这取决于您如何计算周末的付款日期,计息日和日历日期是否总是在付款日期。可以使用数字表上的联接代替CTE。