Sql 要求按子句分组,但不允许
我正在尝试在where子句中包括对MAX date范围的选择。我正在使用必须将其引入,但它错误地指出,Sql 要求按子句分组,但不允许,sql,sql-server,Sql,Sql Server,我正在尝试在where子句中包括对MAX date范围的选择。我正在使用必须将其引入,但它错误地指出,“列'dbo.PURCHLINE.PURCHID'在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。”但它不允许我分组,并引发其他错误。也许我是走错路了。基本上,我需要在一组列中获取此查询的最新日期: Select PURCHLINE.PURCHID as 'PO' ,SUBSTRING(Cast(Max(VENDPACKINGSLIPJOUR.D
“列'dbo.PURCHLINE.PURCHID'在选择列表中无效,因为它既不包含在聚合函数中,也不包含在GROUP BY子句中。”
但它不允许我分组,并引发其他错误。也许我是走错路了。基本上,我需要在一组列中获取此查询的最新日期:
Select
PURCHLINE.PURCHID as 'PO'
,SUBSTRING(Cast(Max(VENDPACKINGSLIPJOUR.DELIVERYDATE) as varChar), 0, 12) as 'DeliveryDate'
,PURCHLINE.QTYORDERED as 'QtyOrdered'
FROM dbo.PURCHLINE
INNER JOIN dbo.INVENTTABLE
ON dbo.PURCHLINE.ITEMID = dbo.INVENTTABLE.ITEMID
INNER JOIN dbo.INVENTITEMGROUP
ON dbo.INVENTTABLE.ITEMGROUPID = dbo.INVENTITEMGROUP.ITEMGROUPID
INNER JOIN dbo.INVENTPOSTING
ON dbo.INVENTITEMGROUP.ITEMGROUPID = ITEMRELATION
INNER JOIN dbo.PURCHTABLE
ON dbo.PURCHLINE.PURCHID = dbo.PURCHTABLE.PURCHID
INNER JOIN dbo.LEDGERTABLE
ON LEDGERACCOUNTID = ACCOUNTNUM
INNER JOIN VENDPACKINGSLIPJOUR
on VENDPACKINGSLIPJOUR.PURCHID = PURCHLINE.PURCHID
WHERE
dbo.PURCHLINE.PURCHSTATUS = 3 --open Order
AND dbo.PURCHLINE.PURCHASETYPE = 3 --Purchase Order
AND dbo.PURCHLINE.DIMENSION IN (@department)
AND INVENTACCOUNTTYPE = 0 --Purchase Packing Slip
AND PURCHLINE.DIMENSION2_ = @division
HAVING Max(VENDPACKINGSLIPJOUR.DELIVERYDATE) between @start and @end
您有一个聚合,因此需要在非聚合字段上分组:
GROUP BY
PURCHLINE.PURCHID
,PURCHLINE.QTYORDERED
这在
HAVING
子句之前。生成错误的group by子句是什么样子的?是不是简单的“按PURCHLINE.PURCHID分组,子字符串(…),PURCHLINE.QTYORDERED”?按PURCHLINE.PURCHID分组我首先尝试了,它在关键字“GROUP”附近说了不正确的语法。“分组依据”是在有条款D之后,当您将所选字段复制到“分组依据”字段中时,是否取出“作为采购订单”和“作为交货日期”等部分?您能显示生成错误的代码吗?您确定分组是正确答案吗?按PURCHID
分组将为每个值提供一个结果,而按QTYORDERED
分组似乎很奇怪。