Sorry for the Header, I can't find the right way to describe what I want, possibly the reason why I can't get a solution by googling :) ... Here my problem:
I've got a table with the following structure and some example data:
CREATE TABLE [dbo].[set_dates](
[Split3_ID] [int] IDENTITY(1,1) NOT NULL,
[CU_ID] [int] NULL,
[order_id] [int] NULL,
[st_date] [datetime] NULL,
[sku] [int] NULL,
[Priority] [int] NULL,
[Delay] [int] NULL,
[CourseDate] [datetime] NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[set_dates]
([CU_ID]
,[order_id]
,[st_date]
,[sku]
,[Priority]
,[Delay])
VALUES
(25721,7907,GETDATE(),63,4,4),
(25718,7910,GETDATE(),63,4,4),
(25718,7910,GETDATE(),6,5,2),
(25719,7908,GETDATE(),6,5,2),
(25719,7908,GETDATE(),57,4,4),
(25719,7908,GETDATE(),52,8,2)
GO
So my Table should look like this:
Split3_ID CU_ID order_id st_date sku Priority Delay CourseDate
1 25721 7907 2014-07-08 18:04:30.973 63 4 4 NULL
2 25718 7910 2014-07-08 18:04:30.973 63 4 4 NULL
3 25718 7910 2014-07-08 18:04:30.973 6 5 2 NULL
4 25719 7908 2014-07-08 18:04:30.973 6 5 2 NULL
5 25719 7908 2014-07-08 18:04:30.973 57 4 4 NULL
6 25719 7908 2014-07-08 18:04:30.973 52 8 2 NULL
What I would like to accomplish now is to set the CourseDate depending on three fields, order_id, Priority and Delay ... more exact:
If there is only one row with the same order_id, then CourseDate = st_date, if there is multiple rows with the same order_id, then the Dates should be entered depending on the Priority. Lowest Priority would be the first CourseDate = st_date, next bigger Priority would be st_date + Delay from previous entry ... and so on ...
In the above example, the outcome should look like this:
Split3_ID CU_ID order_id st_date sku Priority Delay CourseDate
1 25721 7907 2014-07-08 18:04:30.973 63 4 4 2014-07-08
2 25718 7910 2014-07-08 18:04:30.973 63 4 4 2014-07-08
3 25718 7910 2014-07-08 18:04:30.973 6 5 2 2014-07-12
4 25719 7908 2014-07-08 18:04:30.973 6 5 2 2014-07-12
5 25719 7908 2014-07-08 18:04:30.973 57 4 4 2014-07-08
6 25719 7908 2014-07-08 18:04:30.973 52 8 2 2014-07-14
Is there a way to accomplish this? I've got up to ten orders with the same order_id with no presorting, so my first attempts with CASE Statements ended up in a lot of writing.
The second, but not so important problem is, that there may be orders with the same priority from time to time under the same order_id. In this case I would like those to be treated just like CourseDate = st_date
Any help is highly appreciated, as I got a major brainfart at the moment ... ;)