我的指示是显示数量最多的INV_LINE_ITEM.FK_InvoiceNbr。
我一直在使用以下查询的不同变体:
SELECT INV_LINE_ITEM.FK_InvoiceNbr
FROM INV_LINE_ITEM
GROUP BY INV_LINE_ITEM.FK_InvoiceNbr
HAVING MAX(INV_LINE_ITEM.Quantity);
我一直收到错误“在预期条件的上下文中指定的非布尔类型的表达式,靠近';'”。我不确定这个错误意味着什么或如何修复我的代码。
我也尝试过使用:
SELECT
STR(ILI.InvoiceNbr, 4) AS 'Invoice Number'
FROM INV_LINE_ITEM ILI
GROUP BY
ILI.FK_InvoiceNbr, ILI.Quantity
HAVING MAX(ILI.Quantity)
答案 0 :(得分:3)
可能不是最有效的查询。查看以下查询是否有帮助。
SELECT TOP 1 FK_InvoiceNbr
, MAX(Quantity) AS MaxQuantity
FROM INV_LINE_ITEM
GROUP BY FK_InvoiceNbr
ORDER BY MaxQuantity DESC
你也可以这样写。
SELECT TOP 1 FK_InvoiceNbr
FROM INV_LINE_ITEM
GROUP BY FK_InvoiceNbr
ORDER BY MAX(Quantity) DESC
答案 1 :(得分:0)
我不确定你用这种方式使用MAX想要实现的目标。您应该知道MAX将为该组中的该列带来最大值,因此,其类型与其中的表达式相同。
正确的条款会像
一样Having max(field) = 3
答案 2 :(得分:0)
您需要在MAX子句中添加一些内容,使其成为值为true或false的内容。
例如:
HAVING MAX(ILI.Quantity) > 1000
答案 3 :(得分:0)
有点像条件。语法就像这样
HAVING MAX(INV_LINE_ITEM.Quantity) > 3;
但那不是你想要的条件。
我认为你想要的是这个
SELECT INV_LINE_ITEM.FK_InvoiceNbr
FROM INV_LINE_ITEM
ORDER BY INV_LINE_ITEM.Quantity DESC
LIMIT 1
这将为您提供具有最高数量的INV_LINE_ITEM.FK_InvoiceNbr。
答案 4 :(得分:0)
HAVING正在检查有关您聚合的组的聚合属性的条件。
就像WHERE检查行上的条件一样,HAVING根据您在GROUP BY中指定的分组检查行聚合的条件。
通常这是为了向超过100名儿童或商店的学校展示价值超过1000美元的产品。
您似乎没有寻找 - 您正在寻找具有最大数量的集团(实际上甚至不是集团,但发票):
WITH x AS (
SELECT INV_LINE_ITEM.FK_InvoiceNbr, RANK() (OVER BY INV_LINE_ITEM.Quantity DESC) AS rnk
FROM INV_LINE_ITEM
)
SELECT * FROM x WHERE rnk = 1
如果它们与RANK相关,则会给出倍数。还有一个DENSE_RANK和一个ROW_NUMBER分析函数behave a little differently。
如果您希望每张发票中的行数量最多:
WITH x AS (
SELECT INV_LINE_ITEM.FK_InvoiceNbr, RANK() (OVER BY INV_LINE_ITEM.Quantity DESC PARTITION BY INV_LINE_ITEM.FK_InvoiceNbr) AS rnk
FROM INV_LINE_ITEM
)
SELECT * FROM x WHERE rnk = 1