【发布时间】:2015-06-16 08:35:54
【问题描述】:
坚持如何实现以下目标,我们相信使用 IF/ELSE 或 CASE/WHEN 语句:
我们有一个项目,具有以下属性。
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范围内时,应该采取购买数量。
如果不在此范围内,则只取 Ordered Quantity。
当订购数量落入购买数量的每个“范围”(本例中为 6 的倍数)时,棘手的部分是这样做:
6(4-6)
12(10-12)
18(16-18)
24(22-24)
and so on...
每个项目可能有不同的购买/公差数量。
有兴趣了解您的解决方案/建议。
下面是带有值的创建表语句:
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 来达到预期的结果。开发人员 D,我在“范围”语句中添加了附加注释。它与我上面包含的所需结果集有关。
-
嗯,你能提供你的表的创建 stmts 吗?
-
我会做并编辑帖子。
标签: sql sql-server math