Sql have/groupby子句中的非布尔类型有问题
我的说明是显示具有最高数量的存货行项目.FK\u发票编号 我一直在处理以下查询的不同变体:Sql have/groupby子句中的非布尔类型有问题,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我的说明是显示具有最高数量的存货行项目.FK\u发票编号 我一直在处理以下查询的不同变体: SELECT INV_LINE_ITEM.FK_InvoiceNbr FROM INV_LINE_ITEM GROUP BY INV_LINE_ITEM.FK_InvoiceNbr HAVING MAX(INV_LINE_ITEM.Quantity); 我一直收到错误“在“;”附近预期条件的上下文中指定的非布尔类型的表达式”。我不确定这个错误是什么意思,也不知道如何修复我的代码 我还尝试使用: SELE
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)
可能不是最有效的查询。查看以下查询是否有帮助
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
可能不是最有效的查询。查看以下查询是否有帮助
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
我不知道你用这种方式来达到什么目的。您应该知道,MAX将为该组中的该列带来最大值,因此,与其中的表达式类型相同 一个正确的子句应该是这样的
Having max(field) = 3
我不知道你用这种方式来达到什么目的。您应该知道,MAX将为该组中的该列带来最大值,因此,与其中的表达式类型相同 一个正确的子句应该是这样的
Having max(field) = 3
您需要在MAX子句中添加一些内容,使其计算结果为true或false 例如:
HAVING MAX(ILI.Quantity) > 1000
您需要在MAX子句中添加一些内容,使其计算结果为true或false 例如:
HAVING MAX(ILI.Quantity) > 1000
有点像条件。语法如下所示
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。具有类似的条件。语法如下所示
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。HAVING正在检查有关正在聚合的组的聚合属性的条件 就像WHERE检查行上的条件一样,根据您在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
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
如果他们的排名持平,这将产生倍数。还有一个稠密秩和一行数的解析函数
如果您希望每个发票中的行具有最高数量:
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
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
HAVING正在检查有关正在聚合的组的聚合属性的条件 就像WHERE检查行上的条件一样,根据您在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
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
如果他们的排名持平,这将产生倍数。还有一个稠密秩和一行数的解析函数
如果您希望每个发票中的行具有最高数量:
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
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
这很有效。所以,让我确定我了解这里发生了什么。“TOP 1”将结果限制为一行,然后从库存行项目中选择FK\u InvoiceNbr和MAX(数量)。难道不能像我在最初的查询中那样使用HAVING子句吗?哦,谢谢你的帮助。这可能是OP想要的。这是有道理的。我想我遇到了麻烦,因为我查找了我得到的错误,而不仅仅是查找布尔表达式是什么以及它们如何与HAVING子句一起使用。这非常有效。所以,让我确定我了解这里发生了什么。“TOP 1”将结果限制为一行,然后从库存行项目中选择FK\u InvoiceNbr和MAX(数量)。难道不能像我在最初的查询中那样使用HAVING子句吗?哦,谢谢你的帮助。这可能是OP想要的。这是有道理的。我想我在查找错误时遇到了麻烦,而不仅仅是查找布尔表达式是什么以及它们如何与HAVING子句一起使用。我正在尝试解读您的指令。是否要返回一行,即发票数量值最高的行?或者您是否试图为每张发票显示数量最高的行项目(导致每张发票显示一行,而不是一行)?我正在尝试解读您的说明。是否要返回一行,即发票数量值最高的行?或者您是否试图为每张发票显示数量最高的行项目(导致每张发票一行,而不是一行)?