我目前有一些代码根据行号设置日期。我想使用邮政编码来设置,因此在邮政编码相同的情况下,它使用 1 月的第一个日期,当到达 1 月 30 日时,它会循环回使用下一组邮政编码的第一个日期。
数据应如下所示:
CardNumber | PostCode | SchedServiceStart
34198 | GL53 | 01/01/2014
34199 | GL53 | 01/01/2014
35172 | GU4 | 02/01/2014
38764 | GU4 | 02/01/2014
83412 | GU4 | 02/01/2014
28171 | PL1 | 03/01/2014
28170 | PL1 | 03/01/2014
这是我当前使用的按行号设置日期的代码:
WITH CTE as
(SELECT CardNumber,
SchedServiceStart,
ROW_NUMBER() OVER (ORDER BY CardNumber) as rn
FROM tblContractSite
INNER JOIN tblContract ON tblContractSite.ContractRef = tblContract.ContractID
WHERE tblContractSite.SiteServiceTypeRef = 1 )
UPDATE CTE
SET SchedServiceStart
=CAST('01/01/2014' as Datetime)+(rn-1)%30 -- 30 day period in jan from the 1st
最佳答案
在您的查询中只需替换:
ROW_NUMBER() OVER (ORDER BY CardNumber) as rn
与DENSE_RANK() :
DENSE_RANK() OVER (ORDER BY POSTCODE) as rn
在这种情况下,您将根据POSTCODE
为每个组获得相同的增量rn
关于SQL 设置邮政编码相同的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20740764/