【发布时间】:2020-03-20 23:46:58
【问题描述】:
继我之前的问题之后,我是否可以带回最高价格并汇总来自多个供应商的所有数量 [选择最高价格并为所有供应商添加数量] (SQL Server : SELECT Highest Price and add qty's from table)
我想将 case 语句放入查询的 ORDER BY Price DESC 部分,如果数量 > 10 则返回最高价格,如果不满足 case 则返回最低价格,但我似乎无法获得查询工作。是否可以将案例放在同一个查询中?还是有其他方法可以解决这个问题?
这很好用,因为它是
SELECT ManuPartNo, WebPrice, TotalQtyAdded, Supplier
FROM
(SELECT dbo.TableAllProds. *,
ROW_NUMBER() OVER(PARTITION BY ManuPartNo ORDER BY WebPrice DESC) AS RN,
SUM(TotalQty) OVER(PARTITION BY ManuPartNo) AS TotalQtyAdded
FROM TableAllProds) AS t
WHERE RN = 1
ORDER BY ManuPartNo
这是我一直在尝试的,但是我似乎写了 If 部分,它似乎不喜欢语法。
SELECT ProdName, ManuPartNo, Price, Qty, TotalQty, Supplier
FROM ( SELECT *,
ROW_NUMBER() OVER(PARTITION BY ManuPartNo
ORDER BY
CASE WHEN Price > '10' Price DESC
ELSE Price ASC END ) AS RN,
SUM(Qty) OVER(PARTITION BY ManuPartNo) AS TotalQty,
FROM dbo.TableAllProds) AS t
WHERE RN = 1
ORDER BY ManuPartNo;
是否可以在一个查询中编写此内容?任何建议或对其他帖子的指点将不胜感激。
【问题讨论】:
-
不能混合排序。
DESC和ASC不能是表达式的一部分。 -
(1) 没有
case语句,但是有case表达式。 (B) 你可能指的是when Qty > 10,而不是when Price > 10。 (iii) 虽然case表达式不能返回排序顺序,但您可以做一些奇怪的事情,例如order by case when Qty > 10 then -Price else Price end。这将根据Qty翻转顺序。 (d) 停止混合数字和字符串。10是一个数字,'10'是一个字符串。如果您想将Price或Qty与数字进行比较,请使用数字。 -
HABO 谢谢,我在案例中混淆了价格和数量,也将字符串更改为数字使声明工作,但它没有带回我想要的结果。现在已经很晚了。我将发布一些内容和预期结果并重新格式化我的问题。我可以使用 ssis 将最高和最低价格拆分为临时表,然后根据数量选择最高或最低,再次将所有数量添加到另一个临时表中,然后将数据带回单个表并更新总量,我只是不确定如何在一个选择查询中执行此操作。
-
抱歉刚刚在价格前注明了-。应该返回较低的值吗?
-
@JohnSpencer 如果您按
Price(升序)排序,您将首先获得最低价格。按Price的负数排序,第一个值将成为最大负数。
标签: sql sql-server tsql