Таблица схемы:Расчет цены на основе блока вошли
CREATE TABLE [dbo].[TblPriceDetails](
[PriceID] [int] IDENTITY(1,1) NOT NULL,
[VID] [int] NOT NULL,
TypeID int not null,
[RangeStart] [decimal](18, 3) NOT NULL,
[RangeEnd] [decimal](18, 3) NOT NULL,
[Price] [decimal](18, 2) NOT NULL,
[ExtraLoad] [decimal](18, 3) NULL,
[ExtraPrice] [decimal](18, 2) NULL
)
GO
образца данных
Insert into dbo.TblPriceDetails values (1,1, 0,0.250,10,0,0)
Insert into dbo.TblPriceDetails values (1,1, 0.251,0.500,15,0.500,15)
Insert into dbo.TblPriceDetails values (1,1, 3,5,40,1,25)
GO
Insert into dbo.TblPriceDetails values (1,2, 0,0.250,15,0,0)
Insert into dbo.TblPriceDetails values (1,2, 0.251,0.500,20,0.500,20)
Insert into dbo.TblPriceDetails values (1,2, 3,5,50,1,30)
GO
Ожидаемый результат:
Для VID = 1 и TypeID = 1 и заданное значение 0,300
- По мере того как входной блок попадает между RangeStart 0,251 и RangeEnd 0,500 результирующая цена будет 15
Для VID = 1 и TypeID = 1 и заданное значение 0,600
- Согласно данным до 0,500, цена составляет 15 и для каждой дополнительной нагрузки до 0,500 ее другой 15. Таким образом, окончательная цена составит 30
Для VID = 1 и TypeID = 1 и заданное значение 1,500
- Согласно данным до 0,500 цена не является 15. Для каждого дополнительного 0,500 его еще 15, так что для оставшихся 1 устройство было бы 15 * 2. окончательная цена будет 45
Для VID = 1 и TypeID = 1 и заданное значение 5,5
- Согласно данным до 5.000 цена не является 40. Для каждого дополнительного 1 единицу его другой 25, так что окончательная цена будет 65
Нужна помощь в написании запроса для этого. В отличие от моих других вопросов у меня пока нет запроса, чтобы показать, что я придумал до сих пор. На данный момент я не могу создать логику и предложить общий запрос для этого.
Спасибо за ваше время. Я проголосовал за ваш ответ. Он отлично работает в последней версии SQL. Но я считаю, что функция LEAD не будет присутствовать в SQL Server 2008 R2. Любая другая альтернатива для этой работы в 2008 R2 также? – prasanth
Да, только более подробный. Я отредактировал свой ответ –
Обновленный код вызывает эту ошибку - Неправильный синтаксис рядом с ')'. – prasanth