在如何实现以下几点上,我们相信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的范围内时,应该取购买数量。
如果它不在这个范围内,那么它只接受订购的数量。
棘手的部分是,当订购数量落入购买数量的每个“范围”时(在本例中是6的倍数):
6(4-6)
12(10-12)
18(16-18)
24(22-24)
and so on...每个项目可以有不同的购买/容差数量。
有兴趣了解您的解决方案/建议。
下面是带有值的create table语句:
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?
发布于 2015-06-16 16:42:27
您可以这样计算ChargedQuantity:
CASE
WHEN OrderedQuantity >= ToleranceQuantity AND OrderedQuantity <= BuyQuantity THEN BuyQuantity
ELSE OrderedQuantity
END AS ChargedQuantity发布于 2015-06-16 16:58:11
一定要在SQL结果中嵌入CASE语句,否则应用这个逻辑是很简单的。
上面的答案是正确的,
SELECT *,
CASE
WHEN OQ >= TolQ AND OQ <= BQ THEN BQ
ELSE OQ
END ChargedQty
FROM tablehttps://stackoverflow.com/questions/30862553
复制相似问题