SQL Server查询 - 下面的说明

时间:2015-06-16 08:35:54

标签: sql sql-server math

坚持如何实现以下目标,我们相信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?

2 个答案:

答案 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