Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql have/groupby子句中的非布尔类型有问题_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql have/groupby子句中的非布尔类型有问题

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

我的说明是显示具有最高数量的存货行项目.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);
我一直收到错误“在“;”附近预期条件的上下文中指定的非布尔类型的表达式”。我不确定这个错误是什么意思,也不知道如何修复我的代码

我还尝试使用:

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子句一起使用。我正在尝试解读您的指令。是否要返回一行,即发票数量值最高的行?或者您是否试图为每张发票显示数量最高的行项目(导致每张发票显示一行,而不是一行)?我正在尝试解读您的说明。是否要返回一行,即发票数量值最高的行?或者您是否试图为每张发票显示数量最高的行项目(导致每张发票一行,而不是一行)?