坚持如何实现以下目标,我们相信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...
每件商品的购买/容差数量都不同。
有兴趣查看您的解决方案/建议。
下面是带有值的创建表语句:
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行和第10行。 12应该返回10,11.9和12。 我们如何制作12,12和12?
答案 0 :(得分:0)
您可以像这样计算ChargedQuantity:
CASE
WHEN OrderedQuantity >= ToleranceQuantity AND OrderedQuantity <= BuyQuantity THEN BuyQuantity
ELSE OrderedQuantity
END AS ChargedQuantity
答案 1 :(得分:0)
绝对是一个嵌入SQL结果的CASE语句,否则很容易应用这个逻辑。
上面的答案是正确的,
SELECT *,
CASE
WHEN OQ >= TolQ AND OQ <= BQ THEN BQ
ELSE OQ
END ChargedQty
FROM table