Застрял о том, как добиться следующего, мы считаем, что с либо IF/ELSE или CASE/КОГДА заявление:запросов SQL Server - Объяснение Ниже
У нас есть один пункт, со следующими свойствами.
Item = ABC
Buy Quantity = 6
Tolerance Quantity = 4
Мы пытаемся выяснить, как рассчитать заряженное количество, следующее, как он будет работать
Ordered Quantity Charged Quantity
1 1
1.5 1.5
3.83 3.83
4 6
5.54 6
6 6
7 7
8.32 8.32
9 9
10 12
11.9 12
12 12
Количество покупки составляет 6, а допустимое количество равно 4. Это означает, что, когда заказываемое количество становится в диапазоне 4-6, оно должно принимать количество покупки.
Если он не находится в этом диапазоне, он просто берет заказываемое количество.
Хитрая часть делает это, когда заказанное количество попадает в каждый «диапазон» Купить Количество (кратные 6 в этом примере):
6(4-6)
12(10-12)
18(16-18)
24(22-24)
and so on...
Каждый элемент может иметь различные/Tolerance величины Купить.
Интересует ваше решение/совет.
Ниже создать оператор таблицы со значениями:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[StackQuestion](
[OrderedQty] [numeric](19, 6) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[StackQuestion] ([OrderedQty]) VALUES (CAST(1.000000 AS Numeric(19, 6)))
INSERT [dbo].[StackQuestion] ([OrderedQty]) VALUES (CAST(1.500000 AS Numeric(19, 6)))
INSERT [dbo].[StackQuestion] ([OrderedQty]) VALUES (CAST(3.830000 AS Numeric(19, 6)))
INSERT [dbo].[StackQuestion] ([OrderedQty]) VALUES (CAST(4.000000 AS Numeric(19, 6)))
INSERT [dbo].[StackQuestion] ([OrderedQty]) VALUES (CAST(5.540000 AS Numeric(19, 6)))
INSERT [dbo].[StackQuestion] ([OrderedQty]) VALUES (CAST(6.000000 AS Numeric(19, 6)))
INSERT [dbo].[StackQuestion] ([OrderedQty]) VALUES (CAST(7.000000 AS Numeric(19, 6)))
INSERT [dbo].[StackQuestion] ([OrderedQty]) VALUES (CAST(8.320000 AS Numeric(19, 6)))
INSERT [dbo].[StackQuestion] ([OrderedQty]) VALUES (CAST(9.000000 AS Numeric(19, 6)))
INSERT [dbo].[StackQuestion] ([OrderedQty]) VALUES (CAST(10.000000 AS Numeric(19, 6)))
INSERT [dbo].[StackQuestion] ([OrderedQty]) VALUES (CAST(11.900000 AS Numeric(19, 6)))
INSERT [dbo].[StackQuestion] ([OrderedQty]) VALUES (CAST(12.000000 AS Numeric(19, 6)))
Работа запроса в соответствии с предложениями:
declare @BuyQuantity as numeric(19,6)
declare @ToleranceQuantity as numeric(19,6)
set @BuyQuantity = 6
set @ToleranceQuantity = 4
SELECT *,
CASE
WHEN OrderedQty >= @ToleranceQuantity AND OrderedQty <= @BuyQuantity THEN @BuyQuantity
ELSE OrderedQty
END AS ChargedQuantity
FROM StackQuestion
Как вы можете видеть в рабочем запросе, строки 10, 11 & 12 должен вернуться 10, 11,9 и 12. Как мы можем сделать их 12, 12 и 12?
Как ваш вопрос связан с SQL вы добавили? Я вижу здесь только вычисление некоторой функции (количества), и ничего о sql. –
Извините, но не смог понять «когда количество заказов попадает в каждый« диапазон »? –
Энди, я отредактировал сообщение, думал, что IF/ELSE или CASE/WHEN для достижения желаемого результата. Dev D, я добавил дополнительный комментарий к предложению «диапазон», связанный с желаемым набором результатов, который я включил выше. – John