我有一个表格,其中包含根据订购的数量和下订单的客户类型的特定项目的价格...
ID Name Quantity ClientType Price/Unit ($)
========================================================
1 Cheese 10 Consumer 20
2 Cheese 20 Consumer 15
3 Cheese 30 Consumer 12
4 Cheese 10 Restaurant 18
5 Cheese 20 Restaurant 13
6 Cheese 30 Restaurant 10
我在SQL中的WHERE子句中遇到问题,无法选择客户根据订购数量获得最佳价格的行。规则是,他们必须至少满足数量,才能获得该定价层的价格。如果他们的订单低于最低数量,那么他们将获得第一个数量的价格(本例中为10),如果他们的订单超过最大数量(本例中为30),则他们将获得该价格。
例如如果一家餐厅订购26单位奶酪,则应选择ID=5的那一行。如果消费者订购了9个单位的奶酪,则返回的行ID应为1。如果消费者订购50单位的奶酪,那么他们应该得到ID=3。
declare @SelectedQuantity INT;
SELECT *
FROM PriceGuide
WHERE Name = 'Cheese'
AND ClientType = 'Consumer'
AND Quantity <= @SelectedQuantity
WHERE子句中缺少什么?
您的查询将返回小于@SelectedQuantity的所有匹配行。您只想返回最大数量小于所选数量的行,因此需要子查询来获得此结果:
SELECT *
FROM PriceGuide a
WHERE a.Name = 'Cheese'
AND a.ClientType = 'Consumer'
AND a.Quantity = (SELECT MAX(Quantity) FROM PriceGuide
WHERE ClientType = a.ClientType
AND Name = a.Name
AND Quantity <= @SelectedQuantity)
这有点棘手,因为您需要处理小于10的数量。
我认为最好的办法是:
SELECT TOP 1 *
FROM PriceGuide
WHERE Name = 'Cheese' AND ClientType = 'Consumer'
ORDER BY (CASE WHEN @SelectedQuantity >= Quantity THEN 1 ELSE 0 END) DESC,
(CASE WHEN @SelectedQuantity >= Quantity THEN PriceUnit END) ASC,
Quantity ASC;
此版本通过保留给定Name
/ClientType
的所有行来处理最小数量,使用ORDER BY
进行优先级排序。
编辑
如评论中所述,第一个解决方案没有正确处理特殊情况。
下一个尝试:
SELECT TOP 1 ID, Name, Quantity, ClientType, [Price/Unit]
FROM PriceGuide
WHERE Name = 'Cheese'
AND ClientType = 'Consumer'
ORDER BY CASE WHEN Quantity <= @SelectedQuantity THEN Quantity ELSE -Quantity END DESC
假设Quantity
为正,orderby
将返回满足数量的行
对于与此条件不匹配的行,它使用
-Quantity
进行排序。因此,如果没有符合条件的行,将返回数量最小的行。
问题内容: 我在表中有三列:id,街道名称,计数。对于某些ID,不只是一个街道名称。Count告诉将每条街道分配给ID的频率。我怎样才能只获得编号最高的ID和街道名称。 表格示例: 结果应该是这样的: 提前致谢! 问题答案: 您没有指定正在使用的数据库,但是应该可以使用以下数据库: 请参阅带有演示的SQL Fiddle 。注意,您将必须使用MySQL的反引号或数据库使用的任何字符来转义保留字来转义
我正试图根据一个标准将x个列的数据归零 例如: 第1页: 一月二月三月四月五月六月七月八月九月十月十一月十二月 第2页: 版本(标准)=2 因此,我想选择前两个月,并在1月份将所有数据归零 更新:到目前为止,我得到了这么多,现在我只能选择 我无法让它选择范围。
我正在使用Adaptive Server Enterprise/15.7/EBF 25127 SMP sp 136/P/x86 _ 64/Enterprise Linux/ase 157 sp 136 x/3955/64位/FBO/周一2015年10月19日19:12:00 我有一个表,包括多个日期和价格的记录,我希望选择最近的日期和价格是最高的或最大的。 对于错误消息,max()函数似乎不起作用
问题内容: 好的,因此我对其他解决方案没有任何帮助。所以这就是我想要做的。我需要选择多列的行,其中一列的值是最大值。 这是样本数据 我需要选择整行,其中orderfileid是每个唯一商品编号的最大值 返回的数据集应该看起来像 我想我尝试过可以想到的select max(orderfileid)的每种组合 任何帮助都将被申请。谢谢 问题答案: 您需要在子查询中找到MAX值,然后使用这些结果将其连接
在WooCommerce最后一个版本中,我需要在产品页面上显示简短描述中选择的变化的重量,当您选择超过1个数量时,我想在添加到购物车按钮旁边显示总重量。 例如:我选择了4个数量。单位重量为4公斤。我需要显示:“总重量为16公斤”。 如果一般产品有重量,则此代码可以正常工作,但不适用于重量变化:
问题内容: 假设我有一个处理100万个句子的任务。 对于每个句子,我都需要对其进行处理,而这与处理它们的顺序无关。 在我的Java程序中,我从我的主要工作分区中划分出一组期货,并带有一个可调用对象,该可调用对象定义了要在大量句子上完成的工作单元,并且我正在寻找一种优化线程数量的方法分配大量的句子来工作,然后重新组合每个线程的所有结果。 在我看到收益递减之前,我可以使用的最大线程数将使我在速度方面达