SQL 设置邮政编码相同的日期

标签 sql sql-server-2008

我目前有一些代码根据行号设置日期。我想使用邮政编码来设置,因此在邮政编码相同的情况下,它使用 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/

相关文章:

SQL Server 2008 - 条件查询

sql - 如何将 PostgreSQL 转储文件恢复到 Postgres 数据库中?

sql - 检查行是否存在,否则插入

sql - TOP 总是返回相同的行吗

sql - 为 :r command was not found 指定的文件

mysql - 仅当字符串以 MySQL 中的特定模式结尾时才替换 SELECT 中的字符?

mysql - 如何将 2 个查询结果连接在一起?

mysql - 没有 GROUP BY 的 SQL 对表中的组进行排序

sql - 如何在 SQL SERVER 中将 varchar 列转换为 bit 列

sql - SSIS 批量插入到单个表中