Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 要求按子句分组,但不允许_Sql_Sql Server - Fatal编程技术网

Sql 要求按子句分组,但不允许

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

我正在尝试在where子句中包括对MAX date范围的选择。我正在使用必须将其引入,但它错误地指出,
“列'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
分组似乎很奇怪。