首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server查询-说明如下

SQL Server查询-说明如下
EN

Stack Overflow用户
提问于 2015-06-16 16:35:54
回答 2查看 47关注 0票数 1

在如何实现以下几点上,我们相信IF/ELSE或CASE/WHEN语句:

我们有一个项目,具有以下属性。

代码语言:javascript
复制
Item = ABC
Buy Quantity = 6
Tolerance Quantity = 4

我们正在试图弄清楚如何计算收费数量,以下是它的工作原理

代码语言:javascript
复制
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的倍数):

代码语言:javascript
复制
6(4-6)
12(10-12)
18(16-18)
24(22-24)
and so on...

每个项目可以有不同的购买/容差数量。

有兴趣了解您的解决方案/建议。

下面是带有值的create table语句:

代码语言:javascript
复制
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)))

根据建议执行查询:

代码语言:javascript
复制
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?

EN

回答 2

Stack Overflow用户

发布于 2015-06-16 16:42:27

您可以这样计算ChargedQuantity:

代码语言:javascript
复制
CASE
WHEN OrderedQuantity >= ToleranceQuantity AND OrderedQuantity <= BuyQuantity THEN BuyQuantity 
ELSE OrderedQuantity 
END AS ChargedQuantity
票数 0
EN

Stack Overflow用户

发布于 2015-06-16 16:58:11

一定要在SQL结果中嵌入CASE语句,否则应用这个逻辑是很简单的。

上面的答案是正确的,

代码语言:javascript
复制
SELECT *, 
    CASE 
        WHEN OQ >= TolQ AND OQ <= BQ THEN BQ 
        ELSE OQ 
    END ChargedQty
FROM table
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30862553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档