.net 列在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中

.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

我正试图让这个SQL查询从另一个表中获取更多内容。但是,当我尝试将其添加到select时,它给了我一个错误-“列'OrderItem.orderItemValue'在select列表中无效,因为它不包含在聚合函数或GROUP BY子句中。”

以下是原始SQL查询(在存储过程中),它可以正常工作:

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,编辑了错误的答案!我的错!我把它卷回去了。很抱歉唯一的问题是当我这样做时,它似乎没有给我想要的结果。不确定你想要的结果。唯一的问题是当我这样做时,它似乎没有给我想要的结果。不确定你想要的结果。