SQL Server查询-解释如下
关于如何实现以下目标,我们认为使用IF/ELSE或CASE/WHEN语句: 我们有一个项目,具有以下属性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
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,也许可以使用排号。我会考虑这一点。我会试着看看是否能简化这个过程