.net 列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中
我正试图让这个SQL查询从另一个表中获取更多内容。但是,当我尝试将其添加到select时,它给了我一个错误-“列'OrderItem.orderItemValue'在select列表中无效,因为它不包含在聚合函数或GROUP BY子句中。” 以下是原始SQL查询(在存储过程中),它可以正常工作:.net 列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中,.net,sql,stored-procedures,.net,Sql,Stored Procedures,我正试图让这个SQL查询从另一个表中获取更多内容。但是,当我尝试将其添加到select时,它给了我一个错误-“列'OrderItem.orderItemValue'在select列表中无效,因为它不包含在聚合函数或GROUP BY子句中。” 以下是原始SQL查询(在存储过程中),它可以正常工作: SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE SP_InvoiceReports_CustProducts @custI
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE SP_InvoiceReports_CustProducts
@custIdent varchar(50) ,
@startDate datetime ,
@endDate datetime
AS
set @endDate = dateAdd(month, 1, @startDate)
SELECT product.styleDesc, product.styleRef , empCust.custName , productSize.sizeChartNme ,
Sum(orderItemAudit.shipQuantity) as theShipment ,
Sum(orderItemAudit.shipValue) as theCost
FROM orderItemAudit INNER JOIN
orders ON
orderItemAudit.orderIdent = orders.orderIdent INNER JOIN
OrderItem ON
orderItemAudit.orderItemIdent = OrderItem.orderItemIdent AND
orders.orderIdent = OrderItem.orderIdent INNER JOIN
empCust ON
orders.custIdent = empCust.custIdent INNER JOIN
product ON OrderItem.styleRef = product.styleRef INNER JOIN
productSize ON OrderItem.sizeChartIdent = productSize.sizeChartIdent
WHERE empCust.custIdent = @custIdent
and orderItemAudit.dateShipped >= @startDate
and orderItemAudit.dateShipped <= @endDate
GROUP BY product.styleRef, product.styleDesc, empCust.custName, productSize.sizeChartNme
ORDER BY product.styleRef, product.styleDesc, empCust.custName, productSize.sizeChartNme
将ANSI_空值设置为ON
在上设置带引号的\u标识符
去
更改程序SP\u发票报告\u客户产品
@客户varchar(50),
@开始日期时间,
@结束日期日期时间
作为
设置@endDate=dateAdd(月,1,@startDate)
选择product.styleDesc、product.styleRef、empCust.custName、productSize.sizeChartNme、,
总计(orderItemAudit.shipQuantity)作为装运,
总计(orderItemAudit.shipValue)作为成本
从orderItemAudit内部联接
订购
orderItemAudit.OrderIdentit=orders.OrderIdentit内部联接
订单项在
orderItemAudit.OrderItemIdentit=OrderItem.OrderItemIdentit和
orders.OrderIdentit=OrderItem.OrderIdentit内部联接
恩普卡斯特酒店
orders.cusdent=empCust.cusdent内部联接
OrderItem.styleRef上的产品=product.styleRef内部联接
OrderItem.SizeCharident上的productSize=productSize.SizeCharident
其中empCust.cusdent=@cusdent
和orderItemAudit.dateShipped>=@startDate
和orderItemAudit.dateShipped=@startDate
和orderItemAudit.dateShipped您没有通过表达式将列添加到组中:
GROUP BY product.styleRef, product.styleDesc, empCust.custName, productSize.sizeChartNme, OrderItem.orderItemValue
您没有将列添加到group by表达式:
GROUP BY product.styleRef, product.styleDesc, empCust.custName, productSize.sizeChartNme, OrderItem.orderItemValue
将OrderItem.orderItemValue
添加到分组依据
子句:
GROUP BY product.styleRef,
product.styleDesc,
empCust.custName,
productSize.sizeChartNme,
OrderItem.orderItemValue
将OrderItem.orderItemValue
添加到分组依据
子句:
GROUP BY product.styleRef,
product.styleDesc,
empCust.custName,
productSize.sizeChartNme,
OrderItem.orderItemValue
当您执行“分组依据”
时,您说的是“对于这些字段具有相同值的所有行,显示其他字段的一些聚合”
如果组中有一个字段不是,
则需要对其进行聚合或排除
基本上,结果集的每一行都可以表示几十行或数百行原始数据,如果不使用聚合,SQL不知道选择哪一行
也就是说,如果您将它添加到您的
分组依据
列表中,它应该可以解决问题。或者,如果特定组中所有行的该字段的值应该相同,则可以使用类似于MAX()
的简单方法聚合该字段,当您执行分组方式时,您会说“对于这些字段具有相同值的所有行,显示其他字段的一些聚合”
如果组中有一个字段不是,
则需要对其进行聚合或排除
基本上,结果集的每一行都可以表示几十行或数百行原始数据,如果不使用聚合,SQL不知道选择哪一行
也就是说,如果您将它添加到您的分组依据
列表中,它应该可以解决问题。或者,如果该字段在特定组中的所有行的值都应该相同,则可以使用类似于MAX()
抱歉,编辑了错误答案的简单命令来聚合该字段!我的错!我把它卷回去了。很抱歉抱歉,Tejs,编辑了错误的答案!我的错!我把它卷回去了。很抱歉唯一的问题是当我这样做时,它似乎没有给我想要的结果。不确定你想要的结果。唯一的问题是当我这样做时,它似乎没有给我想要的结果。不确定你想要的结果。