Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server查询-解释如下_Sql_Sql Server_Math - Fatal编程技术网

SQL Server查询-解释如下

SQL Server查询-解释如下,sql,sql-server,math,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

关于如何实现以下目标,我们认为使用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的倍数)内时,需要技巧的部分是这样做的:

每个项目可能有不同的购买/公差数量

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

下面是带有值的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
将@BuyQuantity声明为数字(19,6)
将@ToleranceQuantity声明为数字(19,6)
设置@BuyQuantity=6
设置@公差数量=4
选择*,
案例

当OrderedQty>=@ToleranceQuantity和OrderedQty时,您可以这样计算计费数量:

CASE
WHEN OrderedQuantity >= ToleranceQuantity AND OrderedQuantity <= BuyQuantity THEN BuyQuantity 
ELSE OrderedQuantity 
END AS ChargedQuantity
案例

当OrderedQuantity>=公差数量和OrderedQuantity时,您可以这样计算计费数量:

CASE
WHEN OrderedQuantity >= ToleranceQuantity AND OrderedQuantity <= BuyQuantity THEN BuyQuantity 
ELSE OrderedQuantity 
END AS ChargedQuantity
案例

当OrderedQuantity>=ToleranceQuantity和OrderedQuantity肯定是要嵌入到SQL结果中的CASE语句时,否则应用此逻辑就很简单了

上面的答案是正确的

SELECT *, 
    CASE 
        WHEN OQ >= TolQ AND OQ <= BQ THEN BQ 
        ELSE OQ 
    END ChargedQty
FROM table
选择*,
案例

当OQ>=TolQ和OQ肯定是要嵌入到SQL结果中的CASE语句时,否则应用此逻辑就很简单了

上面的答案是正确的

SELECT *, 
    CASE 
        WHEN OQ >= TolQ AND OQ <= BQ THEN BQ 
        ELSE OQ 
    END ChargedQty
FROM table
选择*,
案例


当OQ>=TolQ和OQ时,您的问题与您标记的sql有何关联?我在这里看到的只是一些函数(数量)的计算,而与sql无关。很抱歉,无法理解“订购数量何时落入每个“范围”?Andy,我编辑了这篇文章,正在考虑是否/否则或案例/何时才能达到所需的结果。Dev D,我在“范围”中添加了额外的注释“判决。它与我上面包含的所需结果集有关。那么,您能提供表的创建STMT吗?我将执行并编辑此帖子。您的问题与您标记的sql有何关系?我在这里看到的只是一些函数(数量)的计算,而与sql无关。很抱歉,无法理解“订购数量何时落入每个“范围”?Andy,我编辑了这篇文章,正在考虑是否/否则或案例/何时才能达到所需的结果。Dev D,我在“范围”中添加了额外的注释“判决。它与我上面包含的所需结果集有关。那么,您能提供表的创建STMT吗?我将执行并编辑此帖子。您的问题与您标记的sql有何关系?我在这里看到的只是一些函数(数量)的计算,而与sql无关。很抱歉,无法理解“订购数量何时落入每个“范围”?Andy,我编辑了这篇文章,正在考虑是否/否则或案例/何时才能达到所需的结果。Dev D,我在“范围”中添加了额外的注释“判决。这与我上面提到的期望结果集有关。好吧,你能提供你表格的创建STMT吗?我会做并编辑这篇文章。谢谢Panayotis,但我认为当订购数量达到下一个“范围”时,这不起作用。我会在有时间的时候尝试,但是如果订购数量大于6,它将不会四舍五入到“范围”,例如:(如果订购数量为11,它将显示11而不是12)。谢谢Panayotis,但我认为当订购数量落入下一个“范围”时,这将不起作用。我会在有时间的时候尝试,但是如果订购数量大于6,它将不会四舍五入到“范围”,例如:(如果订购数量为11,它将显示11而不是12)。谢谢Panayotis,但我认为当订购数量落入下一个“范围”时,这将不起作用。我会在有时间的时候尝试,但是如果订购数量大于6,它将不会四舍五入到“范围”,例如:(如果订购数量为11,它将显示11而不是12)。谢谢Chris,我已经添加了创建表/值和工作查询以及我正在尝试实现的功能。我很想让你解释为什么这件事很琐碎。我不知道你想达到什么目的。表定义和数据只有一列,所以我猜您想在CASE语句中使用Row_Number?我认为如果陈述非常琐碎,特别是对于这种问题。人们提供的案例陈述也很琐碎,但显然我们在某个地方遗漏了要点!谢谢Chris,也许可以使用排号。我会考虑这一点。我将试着看看是否可以简化这个问题。谢谢Chris,我已经添加了创建表/值和工作查询,以及我正在尝试实现的功能。我很想让你解释为什么这件事很琐碎。我不知道你想达到什么目的。表定义和数据只有一列,所以我猜您想在CASE语句中使用Row_Number?我认为如果陈述非常琐碎,特别是对于这种问题。人们提供的案例陈述也很琐碎,但显然我们在某个地方遗漏了要点!谢谢Chris,也许可以使用排号。我会考虑这一点。我将试着看看是否可以简化这个问题。谢谢Chris,我已经添加了创建表/值和工作查询,以及我正在尝试实现的功能。我很想让你解释为什么这件事很琐碎。我不知道你想达到什么目的。表定义和数据只有一列,所以我猜您想在CASE语句中使用Row_Number?我认为如果陈述非常琐碎,特别是对于这种问题。人们提供的案例陈述也很琐碎,但显然我们在某个地方遗漏了要点!谢谢Chris,也许可以使用排号。我会考虑这一点。我会试着看看是否能简化这个过程