2013-12-23 1 views
2

В настоящее время я использую код, который устанавливает дату на основе номера строки. Я хотел бы использовать почтовый индекс, чтобы установить так, чтобы почтовый индекс был тем же самым, он использует первую дату в январе, когда он добирается до 30 января, он возвращается к использованию первой для следующей группы почтовых индексов.SQL Установите дату, когда почтовый индекс тот же

Данные должны выглядеть следующим образом:

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 

ответ

3

В запросе просто заменить:

ROW_NUMBER() OVER (ORDER BY CardNumber) as rn 

с DENSE_RANK():

DENSE_RANK() OVER (ORDER BY POSTCODE) as rn 

В этом случае вы получите тот же увеличивается rn для каждой группы на основе POSTCODE

+0

Еще раз, очень просто! Большое спасибо –

Смежные вопросы